簡體   English   中英

DB查詢使用oracledb在node.js中返回未定義的值

[英]DB query is returning undefined value in node.js with oracledb

我是node.js和javascript的新手,並試圖學習這些東西。 在我的測試中,我需要通過select查詢從Oracle DB中選擇一個值,並且需要稍后將其用於我的代碼。 我指的是https://blogs.oracle.com/opal/entry/introducing_node_oracledb_a_node上給出的相同代碼,它工作正常,但無法返回結果值。

下面是我的代碼:

this.getTableData = function(){
        var res;
        oracledb.getConnection(
                {
                    user : "user",
                    password      : "password",
                    connectString : "db " 
                },
                function (err, connection) {
                    if (err) { 
                                console.error(err);
                                console.log("errorrrrrrrrrrr : "+err);
                                return;
                                }               
                    connection.execute("SELECT query",
                         function(err, result) { 
                                    if (err) { 
                                        console.error(err); 
                                            return; 
                                        }
                                    else if(result) {
                                        res = result.rows[0][0];
                                        console.log("result in else if: "+res);
                                        return res;
                                    }});
                    });
    };

該函數返回未定義的值。

當然它返回undefined 這是因為異步回調函數。 你需要做這樣的事情:

this.getTableData = function(callback){
    oracledb.getConnection(
        {
            user : "user",
            password      : "password",
            connectString : "db "
        },
        function (err, connection) {
            if (err) {
                console.error(err);
                console.log("errorrrrrrrrrrr : "+err);
                return;
            }
            connection.execute("SELECT query",
                function(err, result) {
                    if (err) {
                        console.error(err);
                        return;
                    }
                    else if(result) {
                        var res = result.rows[0][0];
                        console.log("result in else if: "+res);
                        callback(res);
                    }});
        });
};

getTableData(function (result) {
    console.log(result);
});

你可以解決這個問題的另一種方法是使用Promise

this.getTableData = function () {
    return new Promise(function (resolve, reject) {
        oracledb.getConnection(
            {
                user: "user",
                password: "password",
                connectString: "db "
            },
            function (err, connection) {
                if (err) {
                    console.error(err);
                    reject(err);
                    console.log("errorrrrrrrrrrr : " + err);
                    return;
                }
                connection.execute("SELECT query",
                    function (err, result) {
                        if (err) {
                            console.error(err);
                            reject(err);
                            return;
                        }
                        else if (result) {
                            var res = result.rows[0][0];
                            console.log("result in else if: " + res);
                            resolve(res);
                        }
                    });
            });
    });

};

getTableData()
    .then(function (result) {
        console.log(result);
    });

您在評論中要求的代碼:

var AddPage = function () {
    var self = this;
    this.enterOtpInput = element(by.model("beneDetail.otp"));
    this.enterMpinInput = element(by.model("retailerMpin"));
    this.verifyBeneficiaryButton = element(by.xpath("//div[2]/div/button"));
    this.verifyBene = function () {
        support.getTableData()
            .then(function (result) {
                console.log("adam: " + result);
                self.enterOtpInput.sendKeys(result);
                self.enterMpinInput.sendKeys("1111");
                self.verifyBeneficiaryButton.click();
            });

    };
}

暫無
暫無

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

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