Как вызвать асинхронный метод из собственных обратных вызовов Meteor?
Мы просто провели несколько часов, читая ТАК с такими ответами, какМетеор: вызов асинхронной функции внутри Meteor.method и возврат результата
К сожалению, я до сих пор неуправлять пользовательскими волокнами или фьючерсами в этом отношении.
Я пытаюсь сделать что-то довольно простое (я думаю!).
При создании пользователя добавьте переменную к объекту пользователя на основе результата асинхронного метода. Так что представьте, если вы хотите, чтобы мой асинхронный метод вызывался на стороннем сервере БД с именем BANK, для возврата которого может потребоваться несколько секунд.
Accounts.onCreateUser(function(options,user){
var Fiber = Npm.require("fibers");
Fiber(function() {
BANK.getBalance(function(err, theBalance) {
if (err) return console.log(err);
_.extend(user,{
balance: theBalance;
});
});
}).run();
return user;
});
Итак, что происходит в приведенном выше примере, это то, что метод BANK вызывается, но к тому времени, когда он возвращает код, код уже перемещен, и _.extend никогда не вызывается.
Я попытался сделать обратный звонок внутри Fiber, что только ухудшило ситуацию: он никогда не вернул пользователя. Ну, это было сделано, но на 3 секунды уже поздно, так что к тому времени все вниз по течению выручало.
Спасибо за любую помощь!