async/await、generator、promise 这三者的关联和区别是什么?
promise
与async/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() 方法,才能继续执行下一步操作。