【发布时间】:2020-10-05 13:48:52
【问题描述】:
我正在尝试运行 sequelize 查询并将值存储在数组中,问题是当映射在元素上迭代时,它会立即运行所有元素,而不是等待第一个元素查询完成new 它正在同时运行。
假设数组是 = [0,1,2] 会发生什么,当我迭代它时,所有与数组 [0]、arr[1]、数组 [2] 处的值相关的查询.. . 同时运行。
我想要什么,当我迭代时,所有与 array[0] 处的值相关的查询都会被执行,然后循环应该针对 array[1] 值运行,依此类推...
await Promise.all([
timingBreak.map(async function (element) {
console.log(
"**************** STARTING NEW *****************",
element
);
obj.timing_name = element.name;
obj.start_time = element.start_time;
obj.end_time = element.end_time;
//new data points
var [
d_total_unique_menu_items_ordered,
] = await db.sequelize.query(
"SELECT count(DISTINCT menui.menu_id) as d_total_unique_menu_items_ordered from ir_reservation_order_menu_items menui join ir_reservation_details_offline booking where booking.restau_id=(:restau_id) and DATE(menui.created_at) between (:from) AND (:to) AND TIME(menui.created_at) >= (:start_time) AND TIME(menui.created_at) <= (:end_time);",
{
replacements: {
end_time: element.end_time,
start_time: element.start_time,
from: from_date,
to: to_date,
restau_id: restau_id,
},
}
);
obj.d_total_unique_menu_items_ordered = await d_total_unique_menu_items_ordered[0]
.d_total_unique_menu_items_ordered;
//new data points
var [
d_total_number_of_cancelled_menu_items,
] = await db.sequelize.query(
"SELECT count(menui.menu_id) as d_total_number_of_cancelled_menu_items from ir_reservation_order_menu_items menui join ir_reservation_details_offline booking where booking.restau_id=(:restau_id) and menui.is_cancelled=1 AND DATE(menui.created_at) between (:from) AND (:to) AND TIME(menui.created_at) >= (:start_time) AND TIME(menui.created_at) <= (:end_time);",
{
replacements: {
end_time: element.end_time,
start_time: element.start_time,
from: from_date,
to: to_date,
restau_id: restau_id,
},
}
);
obj.d_total_number_of_cancelled_menu_items = await d_total_number_of_cancelled_menu_items[0]
.d_total_number_of_cancelled_menu_items;
//new data points
var [
d_average_number_of_menu_items_per_order,
] = await db.sequelize.query(
"SELECT (count(distinct menui.ordered_menu_detail_id)/count(distinct menui.ir_order_id)) as d_average_number_of_menu_items_per_order from ir_reservation_order_menu_items menui join ir_reservation_details_offline booking where booking.restau_id=(:restau_id) and menui.is_cancelled=0 AND DATE(menui.created_at) between (:from) AND (:to) AND TIME(menui.created_at) >= (:start_time) AND TIME(menui.created_at) <= (:end_time);",
{
replacements: {
end_time: element.end_time,
start_time: element.start_time,
from: from_date,
to: to_date,
restau_id: restau_id,
},
}
);
obj.d_average_number_of_menu_items_per_order = await d_average_number_of_menu_items_per_order[0]
.d_average_number_of_menu_items_per_order;
//new data point
var [
d_best_10_selling_menu_items_based_on_pricing,
] = await db.sequelize.query(
"SELECT distinct menui.menu_id,count(menui.menu_id),menui.menu_name,menui.price,sum(menui.price),menui.price_unit_id,sum(menui.quantity) FROM ir_reservation_order_menu_items menui join ir_reservation_details_offline booking where booking.restau_id=(:restau_id) AND menui.is_cancelled=0 AND DATE(menui.created_at) between (:from) AND (:to) AND TIME(menui.created_at) >= (:start_time) AND TIME(menui.created_at) <= (:end_time) group by menui.menu_id order by sum(menui.price) DESC LIMIT 20;",
{
replacements: {
end_time: element.end_time,
start_time: element.start_time,
from: from_date,
to: to_date,
restau_id: restau_id,
},
}
);
obj.d_best_10_selling_menu_items_based_on_pricing = await d_best_10_selling_menu_items_based_on_pricing;
//new data point
var [
d_most_10_selling_menu_items_based_on_quantity,
] = await db.sequelize.query(
"SELECT distinct menui.menu_id,count(menui.menu_id),menui.menu_name,menui.price,sum(menui.price),menui.price_unit_id,sum(menui.quantity) FROM ir_reservation_order_menu_items menui join ir_reservation_details_offline booking where booking.restau_id=(:restau_id) AND menui.is_cancelled=0 AND DATE(menui.created_at) between (:from) AND (:to) AND TIME(menui.created_at) >= (:start_time) AND TIME(menui.created_at) <= (:end_time) group by menui.menu_id order by sum(menui.quantity) DESC LIMIT 20",
{
replacements: {
end_time: element.end_time,
start_time: element.start_time,
from: from_date,
to: to_date,
restau_id: restau_id,
},
}
);
obj.d_most_10_selling_menu_items_based_on_quantity = await d_most_10_selling_menu_items_based_on_quantity;
timing_based_report.push(obj);
obj = {};
}),
]).catch((error) => console.log("dynamic data error", error));
任何帮助将不胜感激
【问题讨论】:
标签: javascript node.js promise async-await sequelize.js