【发布时间】:2020-08-16 11:36:02
【问题描述】:
我创建了一个连接到 API 的函数,该 API 一次返回一个包含 100 个对象的数组。如果没有循环,则 getPageData() 函数在您传递 int 时起作用。但是,当我尝试遍历它时,它什么也没给我。设置超时功能似乎对循环没有帮助。
请帮忙
async function updateWholeDB(){
var results = [];
for (let i = 0; i < getPages(); i++) {
setTimeout(function() {
getPageData(i).then((data) => {
console.log(data)
results.push(data) ;
})
}, 2000)
}
return Promise.all(results);
}
【问题讨论】:
-
Promise.all 在承诺之外?还有你期望 setTimeout 做什么?
-
Promise.all()当您向它传递一组承诺而不是一组结果时,它是否正常工作。然后它返回一个解析为结果数组的承诺。所以,你没有正确使用它。 -
getPageData()返回一个承诺。数据getPageData()returns 被推送到结果数组中。Promise.all()检查以确保结果数组已解决承诺。设置的超时是为了给承诺时间来解决 -
@Amissi
setTimeout()不会阻止执行,它在您的代码中完成的只是延迟对getPageData()的每次调用。您的函数返回return Promise.all(results)将在任何超时或承诺解决之前发生,results仍然是一个空数组。
标签: javascript loops express asynchronous async-await