等待返回值NodeJS

时间:2012-09-13 20:34:15

标签: javascript node.js

我有一个节点服务器,可以调用外部模块。我的问题是我需要通过调用模块返回数据,但节点(非阻塞)只是不等待返回值。任何解决方案?

代码:

Server.js

var value = module.functionA(param);
console.log("Message one %s", value);

Module.js

function callToFunctionInModule(param){
console.log("In func");
return param+2;
}

exports.functionA = function(param){
console.log("Message two");
var returnVal = callToFunctionInModule(param);
return returnVal;
};

输出继电器

Message two
Message one undefined
In func

无论如何都得到以下输出(等待从模块中获取返回值而不使用行 var value = module.functionA(param)中的回调;

1 个答案:

答案 0 :(得分:2)

首先,您提供的代码(同步)并不代表实际情况(异步)。在你想要处理异步的东西的情况下你应该做的是使用回调。这就是node.js背后的整个想法 - 事件驱动的* ness *。

<强> Server.js

module.functionA(param, function(val) {
    console.log("Message one %s", val);
});

<强> Module.js

function callToFunctionInModule(param, cb) {
    console.log("In func");
    /* some db query */
    not_so_magical_async_stuff("blah", function(/* value passed as argument */) {
        cb(param + 2 /* or the value passed as an argument to this function */);
    }
}

exports.functionA = function (param, cb) {
    console.log("Message two");
    callToFunctionInModule(param, cb);
};

现在,会发生什么: 传递给functionA的函数传递给callToFunctionInModule,{{1}}将返回的值作为参数进行回调。结果:非阻塞漂亮的代码!相信我,一旦你迷上了这个异步的东西,你会爱上它!