探索async

栏目: JavaScript · 发布时间: 6年前

内容简介:里面如何实现这个我还真不清楚,但是可以通过队列模拟其实现可以看出来

async 本质是什么? 其实就是 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)转换一下就很清楚了
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

众妙之门

众妙之门

Smashing Magazine / 腾讯ISUX社交用户体验设计部 / 人民邮电出版社 / 2013-4 / 59.00元

《众妙之门——网站重新设计之道》是一本精彩、实用的网站UI设计宝典,其中的文章来自于世界知名WEB设计与开发博客Smashing Magazine。全书内容丰富,包括:网站重新设计的商业思考,HTML5与CSS3,重新认识JavaScript,构建更优用户体验的技术,移 动用户体验设计,等等。这些都是目前业内热度最高、从业人员最想了解的话题。无论是设计师还是开发人员,无论水平是高还是低,读者都能从......一起来看看 《众妙之门》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试