我正在尝试使用async await创建一个“同步的循环”,但我得到了在第一个承诺之后得到所有结果的奇怪行为。
这是我的测试用例。了解如何将所有内容组合在一起而不是逐页打印
const p = () => new Promise((resolve) =>{
setTimeout(()=>{
resolve(Math.floor(Date.now() / 1000))
},1000)
})
const test = () =>{
[1,2,3,4,5,6,7,8,9,10].map(async () =>{
const e = await p();
console.log(e)
});
}
test();
答案 0 :(得分:3)
就像我在评论中提到的那样,地图不是承诺意识。还有像Bluebirds.map
这样的替代品,但是容易的选择是使用for循环,..
保持您的示例是您想要循环数组,您也可以使用for of
变体。更改为for (let a = 1; a <= 10; a ++)
也会有效。
例如
const p = () => new Promise((resolve) =>{
setTimeout(()=>{
resolve(Math.floor(Date.now() / 1000))
},1000)
})
const test = async () =>{
for (const a of [1,2,3,4,5,6,7,8,9,10]) {
const e = await p();
console.log(e)
}
}
test();
&#13;
值得指出的是,蓝鸟地图还有其他技巧,它有一个并发选项。这对于防止Promise.all
可能发生的颠簸非常方便,你基本上说你想一次做x
个承诺,例如。你有10个承诺要做,但你发现同时做3个更合理。