2016-01-14 42 views
1

我在服務器端通過Meteor.methods進行異步調用。MeteorJS的承諾

我希望我的客戶端在嘗試運行任何進一步的邏輯之前等待異步響應。

我需要幫助瞭解如何利用異步/承諾與遠程HTTP請求。

目前,我有一個非常簡單的事件設置:

'click #getOrders': function() { 
    Meteor.call('getOrders', function(err, data) { 
     if (!err) { 
     console.log(data); 
     } 
    }) 
    } 

,然後調用:

var shopifyAPI = Meteor.npmRequire('shopify-node-api'); 
var Shopify = new shopifyAPI({ 
    shop: 'xxxxx.myshopify.com', 
    shopify_api_key: 'xxxxxx', 
    access_token: 'xxxxx' 
}); 

Meteor.methods({ 
    'getOrders': function() { 

    var promise = new Promise(function(resolve, reject) { 
     Shopify.get('/admin/orders/count.json', function(err, res) { 
     if (err) reject(err); 
     else resolve(res); 
     }); 
    }); 

    promise.then(function(data) { 
     return data; 
    }) 

    } 
}) 

當我點擊我的事件處理程序,我可以看到我的服務器日誌被正確地接收數據。在promise.then下添加console.log確認承諾代碼正在工作。

但是,我的客戶端console.log始終未定義,因爲它在我的異步響應回來之前返回結果。我如何正確處理這個問題?

回答

1

您應該返回承諾。

return promise; 

回國後,在客戶端調用:

data.then(function(data) { 
    console.log(data); 
}); 
+0

返回的承諾是我失蹤了。 – ilrein