关于async和await的问题
老师您好,最近在学习es6的异步处理方案,有一个问题就是如果要对一个数组中的数据进行异步处理的话,如果采用forEach进行遍历,forEach的参数用async函数。那么这个操作将会是并发执行的。但是如果采用for of进行遍历,那么在遍历过程中的异步操作就是继发执行的了。请问老师forEach和for of对数据中的数据进行异步操作的话一个是并发的一个是继发的?
正在回答
1、首先,我们先来看一下什么是继发执行和并发执行:
(1)继发执行:每个时间段只能执行一个任务,一个线程执行中,其他线程必须等待该线程执行完才能执行
(2)并发执行:每个时间段并发地执行多个任务,一般没有先后顺序区分
2、再来看forEach和for of
(1)forEach()是从头到尾把数组遍历一遍,对数组对象的每一个元素执行给定的回调函数,而实际上forEach()是瞬间同时遍历数组元素的(forEach()的特性),这就导致了可能同时执行多个任务(回调),也就是并发执行
(2)for of则是要执行代码块语句完成后才会执行下一次循环,这样每一次只能执行一个任务,也就是继发执行,为什么for of执行代码块语句完成后才会执行下一次循环呢?来看for of的语法:
for (variable of iterable) {
statement
}variable:每个迭代的属性值被分配给该变量。
iterable:一个具有可枚举属性并且可以迭代的对象。
从语法结构上开看,for of遍历数组中的一个元素,就把这个元素分配给变量(variable),变量接收这个元素,就执行一次{……}中的代码,执行完,再遍历数组中的一个元素,再把这个元素分配给变量(variable),变量接收这个元素,就再执行一次{……}中的代码……以此类推。每次执行一个任务。
希望可以帮到你!
- 参与学习 人
- 提交作业 209 份
- 解答问题 3299 个
本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星