0

我有一个节点服务器,它调用外部模块。我的问题是我需要通过调用模块返回数据,但节点(非阻塞)根本不等待返回值。有什么解决办法吗?

代码 :

服务器.js

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

模块.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);行中的回调)

4

1 回答 1

2

首先,您提供的代码(同步)并不代表实际情况(异步)。如果你想处理异步的东西,你应该做的是使用回调。这就是 node.js 背后的全部理念——事件驱动*。

服务器.js

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

模块.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,它以返回值作为参数调用它。结果:非阻塞的漂亮代码!相信我,一旦你迷上了这个异步的东西,你会爱上它的!

于 2012-09-13T20:53:03.363 回答