请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问老师关于异步迭代


function promise(time) {
            return new Promise((res) => {
                setTimeout(() => {
                    res({
                        value: time,
                        done: false,
                    });
                }, time);
            });
        }
        // const arr = [1, promise(1000), 3, promise(2000), 7];
        const arr = [promise(1000), promise(2000)];

        (async function() {
            for await (let i of arr) {
                console.log(i);
            }
        })();

图片描述
请问老师这段代码为什么输出的是value和done,难道不应该是单纯的value吗?
这里有点疑问,为什么和老师Promise的写法一致为什么输出不同,是因为Array默认就实现了Symbol.asyncIterator的原因会帮我们内部自己处理了实现,他会将Promise resolve的值直接await出来。
而我们自己实现asyncIterator的时候就需要在Promise中resolve(value:any,done:Boolean)。
请问老师是这个原因导致的吗,还是其他原因》

正在回答

1回答

https://img1.sycdn.imooc.com//szimg/5f3dd39a09f9526013100398.jpg

红色框中的意思是:在使用for await of时对可迭代对象(比如Array)会创建一个迭代循环。Symbol.asyncIterator指的是对于自定义的迭代对象来说的。

0 回复 有任何疑惑可以回复我~
  • 提问者 hy_wang #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-08-31 09:36:52
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信