异步迭代for await of

// 异步迭代 for await of
// 先复习一下同步迭代
// const arr = ['es6', 'es7', 'es8', 'es9'] // 举个例子
// arr[Symbol.iterator] = function() {
// let nextIndex = 0
// return {
// next() {
// return nextIndex < arr.length ? {
// value: arr[nextIndex++],
// done: false
// } : {
// value: undefined,
// done:true
// }
// }
// }
// }

// for (let item of arr) {
// console.log(item);
// }

function getPromise(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
value: time,
done: false
})
}, time)
})
}
const arr = [getPromise(1000), getPromise(2000), getPromise(3000)]
arr[Symbol.asyncIterator] = function() {
let nextIndex = 0
return {
next() {
return nextIndex < arr.length ? arr[nextIndex++] :
Promise.resolve({
value: undefined,
done: true
})
}
}
}

// for (let item of arr) { // for of 瞬间执行完 不会等待
// console.log(item)
// }

async function test() {
for await (let item of arr) {
console.log(item)
}
}
test()

 

posted @ 2021-03-24 21:48  贺可英  阅读(218)  评论(0)    收藏  举报