2016-01-14 3 views
1

Я делаю вызов Async на стороне сервера, через Meteor.methods.Посылы в MeteorJS

Я хочу, чтобы мой клиент ожидал ответа асинхронизации, прежде чем пытаться выполнить любую дальнейшую логику.

Мне нужна помощь, чтобы понять, как использовать 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; 
    }) 

    } 
}) 

Когда я нажимаю мой обработчик событий, я могу видеть мои журналы сервер правильно прием данных. Добавление console.log под номером promise.then подтверждает, что код обещания работает.

Однако моя клиентская сторона console.log всегда не определена, поскольку она возвращает результат до того, как мой асинхронный ответ вернется. Как я могу справиться с этим правильно?

ответ

1

Вы должны вернуть обещание.

return promise; 

После возвращения на стороне клиента по телефону:

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

Возвращение обещание это все, что я пропал без вести. – ilrein

Смежные вопросы