2016-12-11 135 views
0

Meteor.call中的Async回調不會等待Meteor.method的結果。這是代碼。Meteor.call不會等待結果

Meteor.call("fetchData",function (err,res) { 
     if (err){ 
      console.log("error ", err); 
     }else { 
      console.log("success ", res); 
      return res; 
     } 
    });//calling this from onRendered of client/somejs.js 

這裏是方法

fetchData :function(){ 
     HTTP.call("POST","http://localhost:8080",{ 
      data:'{"apple":"grape"}' 
     },function (err,res) { 
      if (err){ 
       console.log("error ", err); 
      }else { 
       console.log("success ", res); 
       return res; 
      } 
     }) 
    }//Server/methods.js 

當Meteor.call被觸發時,我得到的服務器上的日誌作爲success與它的結果。 在客戶端我得到success undefined。 客戶端的調用不會等待結果。我也嘗試在服務器上執行Fibers和Synchronous。它不適用於我。在這種情況下,發佈被阻止(我猜是由於API調用)。

另一件事是,我試圖用DB查詢而不是API調用相同。這工作正常。我從方法得到的結果。

我在哪裏出錯了。幫助。

謝謝

回答

1

Sanjith。

您的期貨走在了正確的道路上。默認情況下,Meteor的方法是異步的,所以客戶端需要一些「等待」機制。爲此,我建議使用Meteor.wrapAsync或Promises。這裏是實現兩個兩個詳細的解釋:

https://themeteorchef.com/snippets/synchronous-methods/#tmc-using-wrapasync

https://themeteorchef.com/snippets/promise-based-modules/#tmc-calling-our-promise-based-module-from-the-client

第二個環節是更側重於構造使用承諾你的代碼,但給出瞭如何調用依賴的方法一個很好的演示一個承諾的迴應。

+0

但爲什麼在數據庫查詢的情況下做同樣的工作?我有一個方法,檢查用戶名是否已經存在。這工作正常,我收到客戶端的Meteor.call.Btw結果將檢查出鏈接。我對JS很新穎。 –