通过承诺和等待进行循环?

问题描述 投票:-1回答:1

我做了一个连接到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);
}

javascript loops express asynchronous async-await
1个回答
1
投票

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() 返回一个能正确解析你感兴趣的数据的承诺。 如果不是这样,那么你也必须向我们展示那段代码,这样我们就可以提供如何修复它的建议。

© www.soinside.com 2019 - 2024. All rights reserved.