Javascript 两次调用Node.js函数
我有一个函数,它返回一个数组,计算json数据的销售和购买 调用时,它会注销值,但值会注销两次,导致实际数据丢失,因为循环没有完成两次 功能如下:Javascript 两次调用Node.js函数,javascript,node.js,Javascript,Node.js,我有一个函数,它返回一个数组,计算json数据的销售和购买 调用时,它会注销值,但值会注销两次,导致实际数据丢失,因为循环没有完成两次 功能如下: async function GetTotalShareHeldForUserMarketGraph(data, name) { let current_data_now = new Date(); let lastDateBackMonths = []; lastDateBackMonths.push(formatDateT
async function GetTotalShareHeldForUserMarketGraph(data, name) {
let current_data_now = new Date();
let lastDateBackMonths = [];
lastDateBackMonths.push(formatDateToString(current_data_now));
let doi = 0;
do {
var d = new Date();
d.setFullYear(d.getFullYear(), d.getMonth() - doi + 1, 0);
lastDateBackMonths.push(formatDateToString(d));
doi++;
} while (doi < 7);
let pur_qnt_current = pur_qnt1 = pur_qnt2 = pur_qnt3 = pur_qnt4 = pur_qnt5 = pur_qnt6 = pur_qnt7 = 0;
let sal_qnt_current = (sal_qnt1 = sal_qnt2 = sal_qnt3 = sal_qnt4 = sal_qnt5 = sal_qnt6 = sal_qnt7 = 0);
let backMonthShareHeld_With_Current_share_held = [];
let backMonthShareHeld = [];
let current_price;
data.forEach((v) => {
let date = formatDateToString(v.Date);
let time = formatTimeToString(v.Date);
if (v["Details"] === name) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt_current += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt_current += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[0])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt1 += GetTrueQuantity(date, time, v["Quantity"]);
console.log("PURE1: " + pur_qnt1)
}
if (v["Action"] === "SALE") {
sal_qnt1 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[1])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt2 += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt2 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[2])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt3 += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt3 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[3])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt4 += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt4 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[4])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt5 += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt5 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[5])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt6 += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt6 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
if (v["Details"] === name && formatDateToStringSlash(date) <= formatDateToStringSlash(lastDateBackMonths[6])) {
if (
v["Action"] === "PURCHASE" ||
v["Action"] === "Matched Bid" ||
v["Action"] === "Partially Matched Bid"
) {
pur_qnt7 += GetTrueQuantity(date, time, v["Quantity"]);
}
if (v["Action"] === "SALE") {
sal_qnt7 += GetTrueQuantity(date, time, v["Quantity"]);
}
}
});
current_price = await returnCurrentPrice(name);
console.log(
sal_qnt1,
sal_qnt2,
sal_qnt3,
sal_qnt4,
sal_qnt5,
sal_qnt6,
sal_qnt7
);
console.log(
pur_qnt1,
pur_qnt2,
pur_qnt3,
pur_qnt4,
pur_qnt5,
pur_qnt6,
pur_qnt7
);
for (let i = 1; i <= 7; i++) {
var pur_qnt = "pur_qnt" + i;
var sal_qnt = "sal_qnt" + i;
console.log(eval(pur_qnt))
var share_value = parseInt(eval(pur_qnt) - eval(sal_qnt));
backMonthShareHeld[lastDateBackMonths[i - 1]] = share_value * current_price[0]["current_price"];
}
backMonthShareHeld_With_Current_share_held["current_held"] =
parseInt(pur_qnt_current) - parseInt(sal_qnt_current);
backMonthShareHeld_With_Current_share_held[
"back_month_held"
] = backMonthShareHeld;
return backMonthShareHeld_With_Current_share_held;
}
然后它再次运行,输出如下
0 0 0 0 0 0 0
0 0 0 0 0 0 0
编辑-
给出的输入是
portfolio_data.forEach(async (e) => {
let true_date = formatDateToString(e.Date);
let true_time = formatTimeToString(e.Date);
if (first_transaction_date > true_date) {
first_transaction_date = true_date;
}
user_data.push({
user_id: userData[0].id,
type: e.Action,
name: e.Details,
quantity: e.Quantity,
total: e.Total || e.Value,
date: new Date(),
});
let true_quantity = GetTrueQuantity(true_date, true_time, e.Quantity);
if (total_share_held_back_months_values[e.Details]) {
total_share_held_back_months =
total_share_held_back_months_values[e.Details];
} else {
total_share_held_back_months = GetTotalShareHeldForUserMarketGraph(
portfolio_data,
e.Details
);
total_share_held_back_months_values[
e.Details
] = total_share_held_back_months;
}
console.log(total_share_held_back_months)
current_shares_held = total_share_held_back_months["current_held"];
BackMonthShareHeldValues[e.Details] =
total_share_held_back_months["back_month_held"];
非常感谢,因为我似乎无法通过文档或其他问题找到解决方案 您能分享您正在尝试的示例吗?@ShraavanHebbar请查看问题
投资组合数据的更新。forEach(async(e)=>{
不是为接受async
函数而设计的。”total\u share\u Hold\u months=GetTotalShareEldForUserMarketGraph
”GetTotalShareHeldForUserMarketGraph
是一个异步函数,需要这样对待。
portfolio_data.forEach(async (e) => {
let true_date = formatDateToString(e.Date);
let true_time = formatTimeToString(e.Date);
if (first_transaction_date > true_date) {
first_transaction_date = true_date;
}
user_data.push({
user_id: userData[0].id,
type: e.Action,
name: e.Details,
quantity: e.Quantity,
total: e.Total || e.Value,
date: new Date(),
});
let true_quantity = GetTrueQuantity(true_date, true_time, e.Quantity);
if (total_share_held_back_months_values[e.Details]) {
total_share_held_back_months =
total_share_held_back_months_values[e.Details];
} else {
total_share_held_back_months = GetTotalShareHeldForUserMarketGraph(
portfolio_data,
e.Details
);
total_share_held_back_months_values[
e.Details
] = total_share_held_back_months;
}
console.log(total_share_held_back_months)
current_shares_held = total_share_held_back_months["current_held"];
BackMonthShareHeldValues[e.Details] =
total_share_held_back_months["back_month_held"];