2012-09-13 163 views
0

我有一個節點服務器可以調用外部模塊。我的問題是我需要通過調用模塊返回數據,但節點(非阻塞)僅僅是不等待返回值。任何解決方案?等待返回值NodeJS

代碼:

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

奇怪!根據我,它應該正常工作.... –

+0

這就是我雖然也..我不知道它是否與模塊內的電話自己... – Erwald

+0

只是檢查...但是' param'在最初調用'module.functionA'之前分配給任何東西? – rjz

回答

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,它調用回以返回的值作爲參數。結果:非阻塞美麗的代碼!相信我,一旦你迷上了這個異步的東西,你會愛上它!