Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两次调用Node.js函数_Javascript_Node.js - Fatal编程技术网

Javascript 两次调用Node.js函数

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

我有一个函数,它返回一个数组,计算json数据的销售和购买

调用时,它会注销值,但值会注销两次,导致实际数据丢失,因为循环没有完成两次

功能如下:

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"];