【发布时间】:2018-12-06 22:48:44
【问题描述】:
我需要了解使用 mongoose 级联 Promise 的正确方法。
我的函数 createCustomerBills 接收一个客户 ID 列表,我需要为每个客户创建一个简单的账单。
代码如下:
const createCustomerBill = (customer) => {
return BillModel.create({
customer_id: customer.id,
value: 100
});
}
const createCustomerBills => (customerIds) => {
let criteria = {
_id: { $in: customerIds }
};
return CustomerModel.find(criteria)
.then(result => {
return result.map(customer => {
return createCustomerBill(customer);
}
})
.then(result => {
return CustomerModel.update(
{ _id: customer.id },
{ status: "BillCreated" }
);
});
}
步骤如下: 1.获取所有客户列表 2.为每个客户创建账单 3. 对于每张账单,更新客户状态
如果这是正确的方法和可能的缺点,我需要一个建议。
【问题讨论】:
-
createCustomerBill完全是异步的吗?此外,您似乎只运行CustomerModel.update一次,而不是每张账单一次 -
是的,我需要全部异步,实际上我的理解是 createCustomerBill 是异步的(因为 mongoose create 是异步的)。我错了吗?
-
那么你做错了,因为
return result.map立即返回一个数组,所以在调用CustomerModel.update之前没有“等待” -
Umm...所以看到更新状态代码需要是
createCustomerBill: createCustomerBill(customer).then(...)的then,在地图内,对吧? (这是我需要的那种建议……)
标签: javascript mongoose promise