欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Promise, Generator, async/await的渐进理解

程序员文章站 2022-07-11 23:52:59
作为前端开发者的伙伴们,肯定对Promise,Generator,async/await非常熟悉不过了。Promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单)。可回头来梳理他们的关联时,你惊讶的发现,他们是如此的密切相关。 一、三者关系与发展史 我对他们三 ......

     作为前端开发者的伙伴们,肯定对promise,generator,async/await非常熟悉不过了。promise绝对是烂记于心,而async/await却让使大伙们感觉到爽(原来异步可以这么简单)。可回头来梳理他们的关联时,你惊讶的发现,他们是如此的密切相关。

一、三者关系与发展史

Promise, Generator, async/await的渐进理解

      我对他们三者之间的关联理解如上图所示,promise是基础,generator和async/await串连多个promise的同步执行,也就是把promise的异步特性变为同步,编程更爽。当然generator的yield也可以跟非promise类型的对象,对于generator更可以理解为迭代器。而async/await则是多个promise同步执行的简单方法。

      但我们不难发现在处理promise的时候generator和asnyc/await的返回结果也会一个promise,你可以按照一个标准的promise进行处理。

发展史:

      本人最先接触promise是jquery的deferred对象,然后就出现了bluebird这类实现promise a+规范的库,在后来就是es6对他的原生实现,以及对generator的加入,再后来async/await又出现了。

二、实例代码对比

Promise, Generator, async/await的渐进理解

从看到上述代码,对多个异步请求的处理方案从promise->generator->async/await的变迁,代码量越来越少,理解起来也更为简单。当然输出结果如下:

Promise, Generator, async/await的渐进理解

1. four:延迟一秒输出

2. fivesix:延迟两秒输出,说明await真实同步执行的

三、其他

1. 本文章只是本人对promise,generator,async/await的简单理解,希望对部分小伙伴所有帮助。

2. 当然async/await不是javascript的特色,在其他语言中也是有实现的,如:java, c#。有兴趣的朋友可以查看《》文章,对c#与javascript的对比。