【发布时间】:2020-06-13 17:43:12
【问题描述】:
我有如下代码。我打算做的是:
1) For 循环并按顺序调用 api。
2) 下一个 for 循环迭代仅在 promise resolve 后执行,延迟 1 秒。
我正在这样做,但 console.log 什么也没打印。处理它的正确方法是什么?
const axios = require('axios');
function getData(i){
return axios.get(`http://www.api.com/${i}`);
}
for (let i = 0; i < 10000000; i++) {
setTimeout(() => {
getData(i)
.then((res) => {
console.log(`successs ${i}`);
})
.catch((err) => {
console.log(`fail ${i}`);
})
}, 1000)
}
【问题讨论】:
-
所以你真的想开始延迟1秒,甚至在请求之前?
-
这将在 1 秒内触发 all 承诺获取(嗯,等待能够运行)。请参阅“promise chaining”,了解如何将其调整为按序列运行。最直接的转换是仅从先前承诺的解决中调用“setTimeout”。使用一个函数,这样就可以递归地完成。
-
现在,对于“不记录”位。 1.尝试登录getData(以显示promise确实创建了); 2. 将循环更改为仅 1..10 (以避免创建过多的计时器和承诺的并发症)。
标签: javascript node.js ecmascript-6