我有一个节点服务器,可以调用外部模块。我的问题是我需要通过调用模块返回数据,但节点(非阻塞)只是不等待返回值。任何解决方案?
代码:
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)中的回调;
答案 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}}将返回的值作为参数进行回调。结果:非阻塞漂亮的代码!相信我,一旦你迷上了这个异步的东西,你会爱上它!