请问同步异步迭代
来源:2-10 数组的扩展
hy_wang
2020-08-28
老师能解释下这段代码吗,为什么会这样打印
function setTime(time) {
return new Promise((resolve) => {
resolve(time)
})
}
(async function test() {
const arr = [setTime(1000), 2, 3, setTime(2000), 6];
arr[Symbol.iterator] = function*() {
yield '同步迭代器逻辑'
yield '同步迭代器逻辑'
yield '同步迭代器逻辑'
yield '同步迭代器逻辑'
yield '同步迭代器逻辑'
}
for await (let i of arr) {
console.log(i, "i");
console.log("after");
}
console.log(arr[Symbol.asyncIterator])
})();
// 打印结果
同步迭代器逻辑 i
index.html:28 after
index.html:27 同步迭代器逻辑 i
index.html:28 after
index.html:27 同步迭代器逻辑 i
index.html:28 after
index.html:27 同步迭代器逻辑 i
index.html:28 after
index.html:27 同步迭代器逻辑 i
index.html:28 after
index.html:30 undefined
arr中不仅仅有异步也会有同步代码,我覆盖了arr的同步迭代器。可是arr中的Promise对象不应该调用异步迭代器对象返回吗。
我的理解是for await of循环中如果当前项是异步就会用Symbol.asyncIterator处理,同步代码使用Symbol.iterator处理,可是这里同步异步都用了Symbol.iterator处理请问这是为什么?
是因为我在html文件中打开并没有babel转译浏览器不识别awaitof 还是我理解错了吗
可是打印的全是同步迭代器逻辑,请问老师这是为什么?
请问老师这里我上次问了您您没有回复,这里怎么没有异步操作啊。。明明有Promise啊,数组中的Promise不应该就是Symbol.asyncIterator去迭代吗为什么是Symbol.iterator同步迭代了Promise
写回答
1回答
-
上面代码中Promise中没有异步操作。
022020-08-31
相似问题