遍历承诺并等待吗?

时间:2020-05-01 22:15:59

标签: javascript loops express asynchronous async-await

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

1 个答案:

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