我做了一个连接到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()
当你传递给它一个承诺数组,而不是一个结果数组时,它是否能正常工作。然后,它返回一个承诺,解析为一个结果数组。所以,你没有正确使用它。
此外,似乎没有任何理由让一个 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()
返回一个能正确解析你感兴趣的数据的承诺。 如果不是这样,那么你也必须向我们展示那段代码,这样我们就可以提供如何修复它的建议。