在承诺和等待之间循环



我制作了一个函数,该函数连接到一个API,该API一次返回一个包含100个对象的数组。如果没有循环,当你传递一个int时,getPageData((函数就可以工作。然而,当我试图迭代它时,它什么也不给我。设置超时功能似乎对循环没有帮助。

请帮助

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()在向它传递一个承诺数组而不是结果数组时是否正常工作。然后,它返回一个promise,该promise解析为一组结果。所以,你没有正确使用它。

此外,如果事情编码正确,这里似乎没有任何setTimeout()的原因。

如果你想做的是通过多次调用getPageData()得到一系列结果,你可以这样做:

function updateWholeDB(){
let promises = [];
for (let i = 0; i < getPages(); i++) { 
promises.push(getPageData(i));
}
return Promise.all(promises);
}
// usage
updateWholeDB().then(results => {
console.log(results);
}).catch(err => {
console.log(err);
});

这假设getPageData()返回一个承诺,该承诺可以正确地解决您感兴趣的数据。如果不是这样,那么您也必须向我们展示该代码,以便我们就如何修复它提供建议。

最新更新