簡體   English   中英

無法在導出的異步 function NodeJS 上解析 promise

[英]Can't resolve a promise on exported async function NodeJS

所以我在導出異步 function 時遇到了這個問題:

async function getItemData(callback) {
    let result = await pool.getConnection(async function(err, con) {
        if (err) throw err;

        let queryPromise = await new Promise((resolve, reject)=> {

            con.query("SELECT * FROM customers", function(err, rows) {

                if (err) {
                    console.log(err);
                    reject(err);
                } else {
                    console.log('Found records : ' + rows.length);
                    resolve(rows);
                }

            });

        });
    }); 
}

module.exports.getItemData = getItemData;

這里是它的名稱:

app.listen(port, function () {

    console.log('Api server is listening on port '+ port);

    // Call the async function  
    (async () => {  

    let result = await driver.getItemData();

    console.log(result);
    )();

});

promise 中的 console.log 可以正常工作。 但是 function 之外的 console.log 返回 undefined。 知道為什么嗎?

兩個問題:

  • 您的 function 沒有返回任何內容,那么為什么要定義result呢?
  • 我懷疑getConnection()不是異步 function。 您正在傳遞異步 function 作為回調,但這不會使 function 本身異步。 因此,您的await什么也不做。

您可以嘗試將整個 function 包裝在Promise中,然后像這樣返回:

async function getItemData() {
    return new Promise((resolve, reject)=> {
        pool.getConnection(function(err, con) {
            if (err) return reject(err);

            con.query("SELECT * FROM customers", function(err, rows) {
                if (err) {
                    console.log(err);
                    reject(err);
                } else {
                    console.log('Found records : ' + rows.length);
                    resolve(rows);
                }

            });
        });
    }); 
}

module.exports.getItemData = getItemData;

同樣在您的其他文件中,我只會使整個 function 異步,那么您不需要那個丑陋的包裝器:

app.listen(port, async () => {

    console.log('Api server is listening on port '+ port);

    let result = await driver.getItemData();

    console.log(result);

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM