我有很多async
我正在使用的功能,但遇到了一个奇怪的问题。
我的代码正在运行,如下所示:
async mainAsyncFunc (metadata) {
let files = metadata.map(data => this.anotherAsyncFunc(data.url));
return Promise.all(files);
}
anotherAsyncFunc
函数看起来像:
async anotherAsyncFunc (url) {
return await axios({
url,
}).then(res => res.data)
.catch(err => {
throw err;
});
}
当我尝试将更多数据附加到第一个函数时,我的问题就出现了(mainAsyncFunc
)返回。我的想法是在map
,自然地,当一切都说了又做了之后,修改它看起来像:
async mainAsyncFunc (metadata) {
files = metadata.map(data => {
return new Promise((resolve) => {
let file = this.anotherAsyncFunc(data.download_url);
let fileName = data.name;
resolve({
file,
fileName
});
});
});
return Promise.all(files);
}
如果不清楚,我将像平常一样获取文件本身,并向其附加文件名,然后解析该对象。
由于某种原因,这会返回一个待处理的 Promise,而我希望它等待它们完成,然后作为对象中的完整文件和名称返回。任何帮助理解我做错了什么的帮助将不胜感激。
看起来你已经解决了你的问题,只是作为一个指针,你可以进一步简化你的代码,如下所示:
async anotherAsyncFunc (url) {
return (await axios({ url })).data;
}
async mainAsyncFunc (metadata) {
let files = metadata.map(async data => ({
file: await this.anotherAsyncFunc(data.download_url),
fileName: data.name
}));
return Promise.all(files);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)