请问下老师这个打印想不通

来源:6-1 异步编程解决方案Async Await

hy_wang

2020-08-23

老师能解释下这段代码吗,为什么会这样打印

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 还是我理解错了吗
可是打印的全是同步迭代器逻辑,请问老师这是为什么?

写回答

1回答

谢成

2020-08-24

代码中没看到有异步操作,都是同步操作。

0
2
hy_wang
老师在吗,。。
2020-08-28
共2条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1328 学习 · 296 问题

查看课程