nodejs函数中的返回值[重复]

Posted

技术标签:

【中文标题】nodejs函数中的返回值[重复]【英文标题】:return value in nodejs function [duplicate] 【发布时间】: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/

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

【问题讨论】:

【参考方案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,您的解决方案有效。非常感谢!

以上是关于nodejs函数中的返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Nodejs 中的 mySQL 获取数据时如何从 Async/await 函数获取返回值

从python 3.5中的函数返回多个值[重复]

从Javascript中的嵌套函数返回值[重复]

从另一个函数中的promise内部返回一个值[重复]

无法在 Swift 中的函数中返回值 [重复]

Nodejs中异步函数的返回值