async await 并发执行的问题

发布于 2022-09-06 15:18:32 字数 593 浏览 29 评论 0

async sleep(i){
    return new Promise((resolve, reject) => {
        setTimeout(function (){
            resolve(i);
        }, 1000);
    });
}

async start(finsh_callback){

    console.time('g');
    for (let i = 0; i < 5; i++) {
        let res = await this.sleep({
            i:i,
        });
        console.log(res);
    }
    console.timeEnd('g');
}

执行 start 函数
输出

{ i: 0 }
{ i: 1 }
{ i: 2 }
{ i: 3 }
{ i: 4 }
g: 5003.286ms

本来5个任务,如果异步同时进行,也就是1秒左右。
现在改成了async await 的写法之后,变成了一个接着一个进行,花费了5秒。如果我想多个并发执行,如何解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

终陌 2022-09-13 15:18:32
for (let i = 0; i < 5; i++) {
        (async () => {let res = await sleep({
            i:i,
        });
        console.log(res);})()
    }

这个也可以实现,但是和 Promise.all是有本质区别的

偏闹i 2022-09-13 15:18:32

自己找到答案了

let tasks = [];
for (let i = 0; i < 5; i++) {
    tasks.push(this.sleep({
        i:i,
    }));
}
await Promise.all(tasks);

参考文章:https://segmentfault.com/a/11...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文