JavaScript Promise 与 Async/Await 解析
想象一下你在网上订了一份比萨。
你不会一直站在门口无所事事地等待它送达。你可以看视频、工作或和朋友聊天。当比萨送到时,你再吃。
JavaScript 的工作方式也是如此。
像 API 请求或数据库调用这样的任务需要时间。如果 JavaScript 等待每个任务完成,你的应用就会卡死。相反,它会在等待的同时继续运行其他代码。
Promise 代表一个未来才会到达的值。
Promise 有三种状态:
- Pending(进行中)
- Fulfilled(已成功)
- Rejected(已失败)
你很少会看到用于创建新 Promise 的代码。这是因为像 fetch() 这样的现代工具已经为你返回了一个 Promise。
.then() 是做什么用的?
许多人认为 .then() 是用来获取数据的。其实不然。
.then() 注册了一个回调函数。你告诉 JavaScript:“当这个 Promise 完成时,运行这个函数。”
这就像一个外卖 App。你订了餐,App 会说:“食物送到时叫我。”这个函数就是在等待结果。
为什么要使用 Async/Await?
你可以通过链式调用 .then() 来获取用户数据,然后是帖子,最后是评论。这样做虽然可行,但过长的链式调用很难阅读。
Async/await 让代码看起来像普通的、按步骤执行的代码。它更简洁,也更容易理解。
await 会阻塞 JavaScript 吗?
这是一个常见的面试题。答案是:不会。
当 JavaScript 遇到 await 关键字时,它只会暂停那个特定的 async 函数。应用程序的其他部分会继续运行。
示例流程:
- 运行
async函数中的代码。 - 遇到
await并暂停该函数。 - 运行应用程序的其余部分。
- 当任务完成时,恢复
async函数的执行。
Async/await 只是编写 Promise 的一种更简洁的方式。它是一种语法糖。
核心要点:
- Promise = 一个未来的值。
fetch()= 返回一个 Promise。.then()= 就绪时运行此操作。await= 暂停此函数,而不是整个程序。async/await= 更简洁的 Promise 语法。
来源:https://dev.to/aarthirs/javascript-promises-asyncawait-explained-with-a-real-life-example-43bm