Node.js 为什么对象数组在循环内部时变为空

Node.js 为什么对象数组在循环内部时变为空,node.js,Node.js,下面的代码将返回[{}] 下面的代码有什么问题 fileId.forEach((element) => { getFileFromCloud(element) .then((result) => { console.log(result); x.v.push({ dataUrl: result }); }) .catch((err)

下面的代码将返回[{}]

下面的代码有什么问题

 fileId.forEach((element) => {
        getFileFromCloud(element)
            .then((result) => {
                console.log(result);
                x.v.push({ dataUrl: result });
            })
            .catch((err) => {
                console.log(err.message);
            });
    });

您可以生成承诺列表,然后执行Promise.all以获得结果数组

我建议使用async/await语法从Promise.all调用中获得结果,我相信这更具可读性

您还可以执行Promise.all(promises)。然后(resultList=>

这可用于填充x.v阵列

constfileid=[0,1,2,3];
常数x={
五:[]
};
异步函数getFileFromCloud(元素){
返回{fileId:element,data:“some data”};
}
异步函数testDownload(){
让承诺=fileId.map((元素)=>{
返回getFileFromCloud(元素)
。然后((结果)=>{
返回({dataUrl:result});
})
.catch((错误)=>{
控制台日志(错误消息);
抛出错误;//抛出以保持承诺链完好无损。
});
});
让结果列表=等待承诺。全部(承诺);
//附加到x.v数组。
x、 v=x.v.concat(结果列表);
控制台日志(“x.v:,x.v”);
}

testDownload();
太好了!希望对您有所帮助!