第 160 题:输出以下代码运行结果,为什么?如果希望每隔 1s 输出一个结果,应该如何改造?注意不可改动 square 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const list = [1, 2, 3] const square = num => { return new Promise((resolve, reject) => { setTimeout(() => { resolve(num * num) }, 1000) }) }
function test() { list.forEach(async x=> { const res = await square(x) console.log(res) }) } test()
|
题解
因为foreach是并行执行的,并不支持异步,需要改成for或者 for of
1 2 3 4 5 6 7 8 9 10 11 12 13
| async function test() { for(let i = 0 ;i < list.length ; i++){ const res = await square(list[i]) console.log(res) } }
async function test() { for(let i of list){ let res = await square(i) console.log(res) } }
|