Promise、Generator、Async三者的区别

Promise有三种状态:pending(进行中)、resolved(成功)、rejected(失败)

Promise对象的缺点:

1、无法取消Promise,一旦新建它就会立即执行,无法中途取消。

2、如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。

3、当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

4、Promise 真正执行回调的时候,定义 Promise 那部分实际上已经走完了,所以 Promise 的报错堆栈上下文不太友好。


Generator 是ES6引入的新语法,Generator是一个可以暂停和继续执行的函数。

简单的用法,可以当做一个Iterator来用,进行一些遍历操作。复杂一些的用法,他可以在内部保存一些状态,成为一个状态机。

Generator 基本语法包含两部分:函数名前要加一个星号;函数内部用 yield 关键字返回值。

yield表达式本身没有返回值,或者说总是返回undefined。

next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。

function * foo(x) {

    var y = 2 * (yield (x + 1));

    var z = yield (y / 3);

    return (x + y + z);

}

var b = foo(5); 

b.next() // { value:6, done:false }

b.next(12) // { value:8, done:false } 

b.next(13) // { value:42, done:true }


Async 是 Generator 的一个语法糖。

async 对应的是 * 。

await 对应的是 yield 。

async/await 自动进行了 Generator 的流程控制。


async function fetchUser() {

  const user = await ajax()

  console.log(user)

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容