2013-06-28 3 views
1

У меня есть асинхронный вызов на стороне клиента Meteor, с которого я не могу получить возвращаемое значение. Я знаю, что не могу использовать фьючерсы на стороне клиента, поэтому я застрял.Клиентский асинхронный вызов в Метеор?

И поскольку Meteor.call() со стороны клиента, он должен быть асинхронным. Это выглядит следующим образом:

Meteor.call('DirList', path, function(error, result) { console.log(result); });

console.log() работает нормально, но как я могу получить результат обратно в окружающую функцию?

Боб

ответ

2

Вы можете сохранить результат в Session переменной, а затем сделать логику с переменной внутри Deps.autorun контекста. Нравится:

Meteor.call('DirList', path, function(error, result) { Session.set('result', result); }); 
Deps.autorun(function (c) { 
    var result = Session.get('result'); 
    if (!result) return; 
    c.stop(); 
    alert(result); 
}); 
+0

@gabrielpuglises Да, действительно, это действительно работает. Спасибо! Это немного странно, если использовать переменные сеанса (предназначенные для сохранения состояния). Вы бы сказали, что это «лучшая практика» «Метеор» или «официальный» способ обработки асинхронных возвращаемых переменных на стороне клиента? –

+0

Да, это общий способ сделать это, и если вы продолжите использовать Метеор, вы увидите, что это более естественно, чем вы думаете. Просто позаботьтесь о том, чтобы не использовать его слишком много. Если вы это сделаете, ваш код станет нечитаемым. – gabrielhpugliese