und*_*ned 4 asynchronous node.js async-await es6-promise
我正在使用 nodejs v8+,它支持默认的异步等待代码风格。
在我的问题中,我试图将所有承诺推送到一个数组中,然后使用 Promise.all 和 await 关键字来获取响应。但问题是,我无法用键映射承诺。
这是示例:
let users = ["user1", "user2", "user3"];
let promises = [];
for(let i = 0; i < users.length; i++){
let response = this.myApiHelper.getUsersData(users[i]);
promises.push(response);
}
let allResponses = await Promise.all(promises);
Run Code Online (Sandbox Code Playgroud)
在这里,我得到了所有响应的所有收集响应,但我实际上想按用户映射它。例如,目前我正在以这种格式获取数据:
[
{
user1 Data from promise 1
},
{
user2 Data from promise 2
},
{
user3 Data from promise 3
}
]
Run Code Online (Sandbox Code Playgroud)
但我想要这种格式的数据:
[
{
"user1": Data from promise 1
},
{
"user2": Data from promise 2
},
{
"user3": Data from promise 3
}
]
Run Code Online (Sandbox Code Playgroud)
我确信必须有一种方法来映射用户的每一个承诺,但我不知道。
我们要创建一个用户数组。迭代它以创建一个Promise
我们给的数组Promise.all
。然后迭代答案以创建一个对象,该对象将用户与来自 的关联答案相匹配getUsersData
。
关于 Promise.all 的一些知识是返回数据的顺序取决于promises
它的条目中给定的顺序。
const users = ['user1', 'user2', 'user3'];
const rets = await Promise.all(users.map(x => this.myApiHelper.getUsersData(x)));
const retWithUser = rets.map((x, xi) => ({
user: users[xi],
ret: x,
}));
Run Code Online (Sandbox Code Playgroud)
这里有一个关于 Array 方法的很棒的教程(map, filter, some...)
。
归档时间: |
|
查看次数: |
6627 次 |
最近记录: |