博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用promise来实现async
阅读量:6244 次
发布时间:2019-06-22

本文共 1687 字,大约阅读时间需要 5 分钟。

async本质是什么? 其实就是generator的语法糖是自动执行的generator,虽然ES6已经实现了asyncgenerator,但是在生产环境中都是经过babel编译成promise.

简单的async

async function p1(){    console.log(1)    return 1}// 等效function p1(){    console.log(1)    return Promise.resolve(1)}复制代码

一般情况的async

async function p2(){    console.log(2)    let a = await new Promise(resolve => setTimeout(() =>resolve(1), 3000)  )    console.log(a);    return 2}; // 等效function p2(){    console.log(2)    return Promise.resolve(new Promise(resolve => setTimeout(() =>resolve(1), 3000)).then(res => {        let a = res;        console.log(a)        return Promise.resolve(2)    }))} 复制代码

循环中的async

通过队列实现

let p1 = () => new Promise((resolve => setTimeout(() => resolve(1), 1000)));let p2 = () => new Promise((resolve => setTimeout(() => resolve(2), 2000)));let p3 = () => new Promise((resolve => setTimeout(() => resolve(3), 3000)));let ps = [p1, p2, p3];async function p(){    for (let i = 0; i < 3; i++) {        let a = await ps[i]();        console.log(a)    }}// 等效async function p(){    let queue = [];    for (let i = 0; i < 3; i++) {         queue.push(() => ps[i]().then(res => {            let a = res;            console.log(a)        }))     }    queue.reduce((p1, p2) => p1.then(res => p2()) , Promise.resolve());}; 复制代码

可以看出来async简化了Promise,大部分场景下Promise其实也够用了,但是在链式调用的场景下使用async非常简洁. 下面抛出一个问题

let p1  = new Promise((resolve) => resolve(1))let p2 =  new Promise((resolve) => {    resolve(p1);    new Promise(resolve => resolve()).then(() => console.log(2));})p2.then(res => console.log(1))// 为什么先执行2然后执行1? resolve(p1)其实等效于 Promise.resolve().then(res => p1.then(resolve))所以事件队列的进入顺序为// res => p1.then(resolve)// () => console.log(2)// resolve复制代码

转载地址:http://mvvia.baihongyu.com/

你可能感兴趣的文章
云计算在大数据形式下的发展
查看>>
如何更好地进行机房项目的控制成本
查看>>
爱立信高通中兴等成立Avanci专利授权平台 旨在加速物联网发展
查看>>
美情报公司:勒索病毒WannaCry的创作者可能是中国人
查看>>
华科技:以市场为导向 以用户体验为标准
查看>>
诺基亚携手Facebook联合开展跨大西洋现场测试
查看>>
如何检查MySQL数据库的主从延时?
查看>>
红炜:改变光伏电站融资难也需水到渠成
查看>>
三星用户迎利好 三星将推月度安全更新
查看>>
网络时代安全问题凸显 互联网金融如何有效避开痛点?
查看>>
移动OA如何治愈外出办公“焦虑症”?
查看>>
电信运营商解决方案
查看>>
日本显示屏公司的尴尬:夏普被收购 JDI也岌岌可危
查看>>
[MySQL 5.7]:binlog --statement
查看>>
MicroProfile变成了Eclipse MicroProfile
查看>>
中国电信10G PON演进研究成果卓著:为现网升级铺平道路 加速千兆时代到来
查看>>
家庭宽带市场竞争分析
查看>>
台媒:手机应用和免费wifi可瞬间泄露隐私
查看>>
QUnit单元测试文档
查看>>
手机网络电话(VOIP)大比拼
查看>>