我做了一个连接到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);
}
答案 0 :(得分:1)
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()
返回的诺言可以正确解析您感兴趣的数据。如果不是这种情况,那么您也必须向我们展示该代码,以便我们就如何修复提供建议它。