【发布时间】:2019-11-20 15:54:41
【问题描述】:
我正在实现一个选择和下载多个文档的功能。
首先,我构建了一个对象数组,其中包含每个选定文档的名称和指向其位置的链接。
getAllSelectedUrls = () => {
const { selectedFiles } = this.state;
const urls = [];
selectedFiles.forEach((file) => {
this.returnFileUrl(file.id).then(res => res.json()).then((data) => {
urls.push({ fileName: file.name, url: data.content_path });
});
});
return urls;
}
returnFileUrl()是一个异步API调用,通过ID获取文件的链接:
returnFileUrl = async (fileId) => {
try {
const resp = await fetch(`/file?fileId=${fileId}`);
return resp;
} catch (err) {
console.log(err);
}
}
我认为通过在.then 方法中更新urls 数组,我会确保每个url 在它返回时都会得到解决。
当我调用getAllSelectedUrls() 时,我可以在控制台中记录阵列并填充所有数据。但是,我无法遍历它或通过索引访问任何对象,大概是因为此时数据尚未解析。
【问题讨论】:
-
是的,当您将
data.content_path推送到数组时,它的解析就很好了。但是您的getAllSelectedUrls不会等待返回数组,直到所有 url 都被推送。不要使用forEach,不要使用push,而是使用Promise.all,并让getAllSelectedUrls返回一个promise。
标签: javascript reactjs promise async-await