学习JavaScript循环下的async/await

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

内容简介:在进行业务开发的过程中,使用了数组的高级函数从上面的例子可以看出,在将上述的模拟异步任务修改为

问题描述

在进行业务开发的过程中,使用了数组的高级函数 map ,同时使用了ES6语法 async/await ,发现在 map 循环下执行结果是异步执行,并不符合预期

例子说明

/**
 * 异步打印数据
 */
const echo = async (i) => {
    return new Promise((resolve,reject)=>{
        setTimeout(() => {
            console.log('i===>', i,new Date().toLocaleTimeString());
            resolve(i) ;
        }, 100);
    })

}
/**
 * 模拟异步任务
 */
const task = async () => {
    dataArr.forEach( async( item, i ) => {
        await echo(i);
    })
}
/**
 * 启动函数入口
 */
const run = async () => {
    console.log('run-start====>date:', new Date().toLocaleDateString())
    await task() ;
    console.log('run-end======>date:', new Date().toLocaleDateString())
}
/**
* 启动函数
*/
(async () => {
    console.log('start...')
    await run();
    console.log('end...')
})()

//预期效果
start...
run-start====>date: 2019-2-16
i===> 0 23:19:04
i===> 1 23:19:04
i===> 2 23:19:04
i===> 3 23:19:04
run-end======>date: 2019-2-16
end...

//打印结果
start...
run-start====>date: 2019-2-16
run-end======>date: 2019-2-16
end...
i===> 0 23:19:04
i===> 1 23:19:04
i===> 2 23:19:04
i===> 3 23:19:04

从上面的例子可以看出,在 map 循环下使用 await 后,task任务仍然是异步任务,并不符合预期。原因是Array的map、forEach等函数 不会等到所有的步骤都完成,它只会执行任务和执行下一步,可以理解为 async/await 的效果是无效的

解决方案

  • 使用最原始的for循环
  • for...of

将上述的模拟异步任务修改为

for (var i = 0; i < dataArr.length; i++) {
     await echo(i)
 }
 或
 for (const i of dataArr) {
     await echo(i)
 }
参考连接

以上所述就是小编给大家介绍的《学习JavaScript循环下的async/await》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

失控

失控

[美]凯文·凯利(Kevin Kelly) / 张行舟 等 / 译言·东西文库/电子工业出版社 / 2016-1 / 89.00元

《失控:全人类的最终命运和结局》(全新修订本)是一部思考人类社会(或更一般意义上的复杂系统)进化的“大部头”著作,对于那些不惧于“头脑体操”的读者来说,必然会开卷有益。 “大众智慧、云计算、物联网、虚拟现实、网络社区、网络经济、协作双赢、电子货币……我们今天所知的,绝大多数是我们二十年前就已知的,并且都在这本书中提及了。”——凯文·凯利 《失控》成书于1994年,2010年中文版首次面......一起来看看 《失控》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码