问答题514/1588async/await、generator、promise 这三者的关联和区别是什么?

难度:
2023-05-15 创建

参考答案:

promiseasync/await 函数都是用来解决JavaScript中的异步问题,从最开始的回调函数处理异步,到Promise处理异步,到Generator处理异步,再到Async/await处理异步,每一次的技术更新都使得JavaScript处理异步的方式更加优雅。

从目前来看,Async/await被认为是异步处理的终极解决方案,让JS的异步处理越来越像同步任务。

关联

  • async/await:是建立在Generator函数的语法糖,可以更方便地实现异步编程。async 函数返回一个 Promise 对象,await 表达式会阻塞代码执行,直到 Promise 对象状态变为 resolved。

  • Promise:是一种异步编程模型,可以将回调函数嵌套的代码转换为链式调用。Promise 由 pending、fulfilled 和 rejected 三种状态,分别代表进行中、已完成和已失败。

  • Generator:是一种迭代器,可以通过 yield 表达式暂停代码执行,并通过 next() 方法恢复执行。Generator 可以配合 Promise 实现异步流程控制。

区别

  • async/await:是 ES7 引入的新特性,可以让异步编程看起来像同步编程,更加易读易写。async/await 只能用于函数内部,不能用于顶层代码(例如全局作用域)。(PS:高版本的Node中,可以在顶层使用 await)

  • Promise:是 ES6 引入的新特性,使用 then() 方法和 catch() 方法注册回调函数,实现异步编程。Promise 可以使用 race() 方法和 all() 方法处理多个异步操作。

  • Generator:是 ES6 引入的新特性,可以通过 yield 表达式暂停和恢复代码执行,实现异步流程控制。Generator 需要手动执行 next() 方法,才能继续执行下一步操作。

最近更新时间:2024-08-10

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!