在节点js和mongodb中计算订单总价
Posted
技术标签:
【中文标题】在节点js和mongodb中计算订单总价【英文标题】:Calculate order total price in node js and mongodb 【发布时间】:2021-05-13 14:47:29 【问题描述】:我用Node JS和MongoDB构建了一个订单系统,我想在服务器中计算订单total_price
,然后将其保存为新订单,
let ref = (model) =>
return type: mongoose.Schema.Types.ObjectId, required: true, ref: model ;
;
这是我的order
模型架构
items: [
id: ref("menu_item"),
count: String,
size: String,
options: [String],
,
],
total_price: String,
tip: String,
;
这是menu_item
模型架构
name: String,
price: String,
vat: String, // 3%
size: [
name: String,
unit: String,
price: String,
vat: String, // 3%
in_stock: Boolean,
is_default: Boolean,
,
],
options: [
title: String,
options: [
name: String,
price: String,
vat: String, // 3%
in_stock: Boolean,
is_default: Boolean,
,
],
,
],
这怎么可能? 这是我尝试过的一些方法,但方法错误。
当客户发送订单时,此函数将被调用
async (req, res) =>
let total = 0;
let size_price = 0;
let options_price = 0;
let
items,
tip,
= req.body;
let price = 0;
let item_price = items.forEach(async (el) =>
let menu_item = await req.models.menu_item.findOne( _id: el.id );
price += parseInt(menu_item.price);
console.log(menu_item.price) // first 12 second 9
console.log(price) // first 12 second 21
);
console.log(price) // return 0
【问题讨论】:
【参考方案1】:forEach
循环在执行下一次迭代/退出循环之前不会等待异步函数完成。为了等到从数据库中查询到所有记录并更新price
值,我们可以将所有承诺包装在Promise.all
中,或者在for-of
循环中串行执行它们。
这是使用Promise.all
的更新代码:
async (req, res) =>
let total = 0;
let size_price = 0;
let options_price = 0;
let
items,
tip,
= req.body;
let price = 0;
await Promise.all(items.map(async (el) =>
let menu_item = await req.models.menu_item.findOne( _id: el.id );
price += parseInt(menu_item.price);
console.log(menu_item.price) // first 12 second 9
console.log(price) // first 12 second 21
)
);
console.log(price) // return 0
【讨论】:
以上是关于在节点js和mongodb中计算订单总价的主要内容,如果未能解决你的问题,请参考以下文章