【问题标题】:return value in nodejs function [duplicate]nodejs函数中的返回值[重复]
【发布时间】:2018-07-04 05:28:53
【问题描述】:

我是 nodejs 的新手,当我写一个函数时,它不能在函数中返回一个值。我从 mysql 获取结果然后返回函数。我知道原因是因为 nodejs 默认是异步的。我该如何解决我的问题?这是我的源代码:

function getSlaveURL() {
var sqlQuery = "SELECT url FROM `slave` WHERE `id`='2' LIMIT 1";
var returnValue = "";
db.query(sqlQuery, function (error, rows) {
    if (error) {
        returnValue = "";
    } else {
        returnValue = rows[0]['url'];
        console.log("in function result: " + returnValue);
    }
});
return returnValue;
}
console.log("out function result: " + getSlaveURL());

=> 结果:

输出函数结果:

在函数结果中:http://localhost/mynodejs_slave/

请帮我解决这个问题。 谢谢!

【问题讨论】:

    标签: node.js nodes node-modules async.js


    【解决方案1】:

    传递回调函数或使用Promise 来完成。 或者,如果您的 node.js 版本支持,您也可以使用 generatorasync/await。 承诺:

    var getSlaveURL = new Promise(function(resolve, reject) {
        var sqlQuery = "SELECT url FROM `slave` WHERE `id`='2' LIMIT 1";
        var returnValue = "";
        db.query(sqlQuery, function(error, rows) {
            if (error) {
                returnValue = "";
            } else {
                returnValue = rows[0]['url'];
                console.log("in function result: " + returnValue);
            }
            resolve(returnValue)
        });
    });
    
    getSlaveURL.then(function(returnValue) {
        console.log("out function result: " + returnValue);
    });
    

    异步/等待:

    var query = function(sql) {
        return new Promise(function(resolve, reject) {
            var returnValue = "";
            db.query(sql, function(error, rows) {
                if (error) {
                    returnValue = "";
                } else {
                    returnValue = rows[0]['url'];
                    console.log("in function result: " + returnValue);
                }
                resolve(returnValue)
            });
        });
    };
    
    var getSlaveURL = async function() {
        var sqlQuery = "SELECT url FROM `slave` WHERE `id`='2' LIMIT 1";
        let result = await query(sqlQuery)
        console.log("out function result: " + result);
    };
    
    getSlaveURL();
    

    【讨论】:

    • 感谢您的回复,您能帮忙使用 async/await 更新此功能吗?
    • 同理,把db.query改成promise,然后await it.@munyso
    • 请帮我写完整的函数,因为我不知道怎么用async/await写。谢谢!
    • 我使用async/await更新了函数
    • 亲爱的@Cr,您的解决方案有效。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2015-04-19
    • 2013-09-27
    相关资源
    最近更新 更多