如何使用这些异步函数处理JavaScript中的MySQL查询?

时间:2018-12-08 18:07:36

标签: javascript mysql node.js asynchronous

有人可以帮助我解决我的问题吗?我是JavaScript(Node.js)的新手,尝试执行MySQL查询,但这没有任何输出。我不知道该如何处理。

async function processArguments() {
    var result_customer = [];
    for(let i = 2; i < process.argv.length; ++i) {
        let sql = "SELECT Mandantennummer, Firmenname, VornameAnsp, NachnameAnsp, Telefonnummer, Strasse, PLZ"
                  "FROM kunde, item"
                  "WHERE kunde.K_ID=item.K_ID AND I_ID="+ process.argv[i];

        await link.query(sql, function(err_customer, customer, fields_customer) {
            if(err_customer) throw err_customer;
            result_customer.push(customer);
        });
    }

    for(let i = 0; i < result_customer.length; ++i) {
        console.log(result_customer[i].Firmenname);
    }

    link.end();
}

link.connect(function(err) {
    if(err) throw err;

    processArguments();
});

这什么也没输出

感谢帮助

1 个答案:

答案 0 :(得分:1)

您正在将callback函数用作Promise,但无法使用。您需要简化查询。

async function processArguments() {
    var result_customer = [];
    for (let i = 2; i < process.argv.length; ++i) {
        let sql = "SELECT Mandantennummer, Firmenname, VornameAnsp, NachnameAnsp, Telefonnummer, Strasse, PLZ"
        "FROM kunde, item"
        "WHERE kunde.K_ID=item.K_ID AND I_ID=" + process.argv[i];

        const customer = await new Promise((resolve, rej) => {
            link.query(sql, function (err_customer, customer, fields_customer) {
                if (err_customer) rej(err_customer);
                resolve(customer);
            });
        });
        result_customer.push(customer);
    }
    link.end();
}

link.connect(function (err) {
    if (err) throw err;

    await processArguments();
});

如果要使用await,则它必须是Promiseasync函数。

编辑:您可以合并process.argv [i]并将其与该查询中的IN一起使用。

let sql = `SELECT Mandantennummer, Firmenname, VornameAnsp, NachnameAnsp, Telefonnummer, Strasse, PLZ 
FROM kunde, item 
WHERE kunde.K_ID=item.K_ID AND I_ID IN (${process.argv.slice(2).join(',')})`;