将 Array.map() 的结果添加到一个数组中

5

我有一个字符串数组['string1', 'string2'],我想将它们中的每一个转换成(例如:blob:http://something-new),但是我得到了(2) [Promise, Promise]的结果。如何获取已解决的值?

这里是代码

const results = id.map(async assetId => {
    const responseIds = await API.assets.getAssetFileById(assetId);
    let asset = responseIds.data.asset;
    const urlCreator = window.URL || window.webkitURL;
    const blobFile = await file_helper.dataUrlToBlob(asset.file);

    return asset.file = await urlCreator.createObjectURL(blobFile);
});

console.log(results) // (2) [Promise, Promise]

预期输出:

console.log(results) // (2) ['blob:http://something-new1', 'blob:http://something-new2']

Promise.all - zerkms
你应该将 Promise 放在 Promise.all() 中,一旦它们全部解决了,就可以创建数组了。这与 forEach 问题类似。 - Get Off My Lawn
@zerkms,我不确定确切的原因,但我之前遇到过第一种方法不起作用而第二种方法可以的情况。许多风格指南也鼓励使用第二种方法,所以我不会争论。 - Abion47
@Abion47 https://jsfiddle.net/hr6o09px/ - zerkms
1
你会得到Promise,因为一个async函数总是返回一个promise。 - Felix Kling
显示剩余2条评论
1个回答

2
Promise.all(results).then(function(urls) {
  console.log(urls);
});

你需要等待所有的Promise被解决,然后才能处理它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接