2014-05-14 81 views
0

所以我有這樣的服務器文件夾的方法:流星異步問題僅

dataHandler: function(id) 
{ 
    var data; 

    // here I call a server method 
    Meteor.call('getData', id, function(err, result) 
    { 
     data = result; 
    }); 

    // now I want to use data in another method 
    Meteor.call('convertData', data, function(err, result) 
    { 
     data = result; 
    }); 

    return data; 
} 

現在呼籲Meteor.call('convertData' ...)時,將不確定的,這並不工作,爲data。我將如何做到這一點,我不能使用Session.set/get服務器端的流星?

回答

1

在服務器上,您可以選擇同步調用方法。如果您沒有提供默認的回調函數。

如果您未在服務器上傳遞迴調,方法調用將會阻塞,直到方法完成。它最終會返回方法的返回值,或者如果方法拋出異常,它將拋出異常。 - http://docs.meteor.com/#meteor_call

你的代碼應該只是這樣的:

dataHandler: function(id) { 
    var data = Meteor.call('getData', id); 
    return Meteor.call('convertData', data); 
} 
+0

'如果你不傳遞迴調,你是不是末節裏,調用將返回undefined' ...這是什麼意思在裏面一存根?使用這個時,我總是在'data'上定義未定義。 – jt123

+0

存根是執行延遲補償的方法的客戶端版本。在文檔的方法部分的開頭詳細描述了存根。您複製的句子開始於'在客戶端'上。你的問題指定在服務器上。如果方法'getData'返回未定義,那麼可能也會顯示該代碼。 – user728291

0

所以,如果你調用服務器http請求沒有它不會繼續運行回調。所以,如果你寫

data = Meteor.call('getData', id); 

// now I want to use data in another method 
Meteor.call('convertData', data, function(err, result) 
{ 
    data = result; 
}); 

它應該工作的罰款