2016-01-14 43 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