Zac*_*ach 7 javascript promise async-await ecmascript-2017
我有一些async
我正在使用的功能,我有一个奇怪的问题.
我的代码,工作,看起来像:
async mainAsyncFunc (metadata) {
let files = metadata.map(data => this.anotherAsyncFunc(data.url));
return Promise.all(files);
}
Run Code Online (Sandbox Code Playgroud)
anotherAsyncFunc
功能看起来像:
async anotherAsyncFunc (url) {
return await axios({
url,
}).then(res => res.data)
.catch(err => {
throw err;
});
}
Run Code Online (Sandbox Code Playgroud)
当我尝试将更多数据附加到第一个函数(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);
}
Run Code Online (Sandbox Code Playgroud)
如果不清楚,我正常地获取文件,并向其附加一个fileName,然后重新解析该对象.
出于某种原因,这将返回一个挂起的Promise,而我希望它等待它们被完成,然后作为一个完整的文件和一个对象的名称返回.任何帮助了解我做错了什么都将非常感激.
JLR*_*she 10
看起来你已经解决了你的问题,就像一个指针一样,你可以进一步简化你的代码,如下所示:
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4848 次 |
最近记录: |