MeteorJS 中的承诺
Promises in MeteorJS
我正在通过 Meteor.methods
在服务器端进行异步调用。
我希望我的客户在尝试 运行 任何进一步的逻辑之前等待异步响应。
我需要帮助了解如何利用 Async/Promises 和远程 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
始终未定义,因为它在我的异步响应返回之前返回结果。我该如何正确处理?
你应该return承诺。
return promise;
在returning之后,在客户端调用:
data.then(function(data) {
console.log(data);
});
我正在通过 Meteor.methods
在服务器端进行异步调用。
我希望我的客户在尝试 运行 任何进一步的逻辑之前等待异步响应。
我需要帮助了解如何利用 Async/Promises 和远程 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
始终未定义,因为它在我的异步响应返回之前返回结果。我该如何正确处理?
你应该return承诺。
return promise;
在returning之后,在客户端调用:
data.then(function(data) {
console.log(data);
});