javascript - 在 Promise.all() 中处理来自每个承诺的响应对象
问题描述
我有一个 post 端点,它创建客户并返回 userId 作为响应
例如
// Post Data
const customers = [{
firstName: 'John',
lastName: 'Smith',
userId: '12345
},
{
firstName: 'Phil',
lastName: 'Doe',
},
{
firstName: 'Dan',
lastName: 'Joe',
}
]
app.post('/customers', (req, res) => {
const arrayPromises = []
const customers = req.body.customers;
customers.forEach((customer) => {
//checking whether I have a userId already
if (!customer.userId) {
const postRequest = {
headers: Object.assign(res._headers, {
Accept: 'application/json',
'Content-Type': 'application/json',
}),
post:'www.createUserExample.com,
customer // post data,
};
arrayPromises.push(axios(postRequest))
//response will be {userId}
}
})
Promise.all(arrayPromises).then(result => {
//by this way I get all userids
res.status(200).json(result.data)
})
})
但我需要发送一个包含 userIds 的响应对象
示例响应对象应该像
[{
firstName: 'John',
lastName: 'Smith',
userId: '12345'
},
{
firstName: 'Phil',
lastName: 'Doe',
userId: '65765'
},
{
firstName: 'Dan',
lastName: 'Joe',
userId: '786876'
}
]
因此,总的来说,我希望拥有客户的属性并将创建的 userId 附加到发布数据对象并作为响应发送。
请让我知道最好的方法。我喜欢做异步请求来创建客户
解决方案
只需将已经具有 id 的对象推送到数组中。(或对他们的承诺)。Promise.all
然后将导致您正在寻找的数组。该数组不一定只需要包含 API 请求的承诺:
const arrayPromises = []
const customers = req.body.customers;
customers.forEach((customer) => {
//checking whether I have a userId already
if (customer.userId) {
arrayPromises.push(Promise.resolve(customer));
} else {
arrayPromises.push(axios(…));
}
});
您还可以简化为
const arrayPromises = req.body.customers.map((customer) => {
//checking whether I have a userId already
return customer.userId
? Promise.resolve(customer)
: axios(…);
});
推荐阅读
- visual-c++ - 如何转换和连接 lpBuffer 中的位置以将十六进制数字打印为整数?
- typescript - TypeScript:从字符串数组定义联合类型
- airflow - Airflow 1.10 - 未知的任务运行器类型 StandardTaskRunner
- cobol - 在 COBOL 中取消字符串
- python - Django 1.11 - CreateView - 无效表单引发不存在对象属性的错误
- r - R&dplyr - 使用基于另一列的键的bin变量
- php - 我无法通过 webscraper 获取整个源代码 - SIMPLE HTML DOM
- python - 通过参考图像测量照片中物体的大小
- r - 在 Shiny App 的每次迭代中单击多个绘图
- google-cloud-datastore - 使用 Google Cloud Datastore 创建和复制多级嵌入式实体