2015-10-27 36 views
2
返回變量值

我試圖寫在sailsjs在sailsJS

module.exports = { 

someFunction: function(req, res){ 

    var userID = req.param('id') 

    User.findUserName(userID, function(err, receiverName){ 
     if(err){ 
      res.serverError(err); 
     }else{ 
      ReceiverName = receiverName; 
     } 
    }); 
    console.log("#####################################"); 
    console.log(ReceiverName); 
    console.log("#####################################"); 
    . 
    . 
    . 
    . 

控制器但是當我部署控制器,重啓風帆應用程序,並通過URL調用這個函數,我收到以下錯誤控制檯:

error: Sending 500 ("Server Error") response: 
ReferenceError: ReceiverName is not defined 

我想聲明變量ReceiverName是全球性的,但仍然無法把它清除出來。我需要關於使其成爲全局的指導,以便我在else部件內爲其分配值,並將其用於控制​​器內的任何位置。

注1:

然而,當我使用的代碼打印變量的值在控制檯上右側的else塊內:

User.findUserName(userID, function(err, receiverName){ 
    if(err){ 
     res.serverError(err); 
    }else{ 
     console.log("#####################################"); 
     console.log(receiverName); 
     console.log("#####################################"); 
    } 
}); 

值被完全打印。

注2:

我已經進行異步調用來檢索receiverName,所以它不是一個有關返回從異步調用響應懷疑。我正在尋找方法將響應存儲在可以進一步使用的變量中。

+1

配售'變種ReceiverName;上面的'module.exports ......應該做 – Molda

+0

我試過了,但是沒有工作了! – harshvardhan

回答

3

您的備註2有點令人困惑,所以我不確定您是否明白在第一個示例中不起作用的原因是因爲在執行console.log()之前User.findUserName()尚未完成運行。

請記住,數據庫調用是異步的。因此,您想要從數據庫調用中使用的任何值必須在完成後運行。唯一的方法是確保您的代碼在回調中運行。

這就是第二個例子工作的原因。需要receiverName變量的代碼在回調中運行。試試這個,這是幾乎同樣的事情,你的第二個例子......

User.findUserName(userID, function(err, receiverName){ 
    if(err){ 
     res.serverError(err); 
    }else{ 
     doStuffWith(receiverName) 
    } 
}); 
var dostuffWith = function(ReceiverName){ 
    // all the code that you want to use ReceiverName should be in here. 
    console.log("#####################################"); 
    console.log(ReceiverName); 
    console.log("#####################################");  
} 

你應該做與Node.js的,異步和回調的編程模式一些閱讀。像這樣

http://book.mixu.net/node/ch7.html

+0

謝謝:) 我曾經使用過類似的方法。有用! – harshvardhan