Я устанавливаю

var x = (collection.fetch({context:collection}).done(function() {
            return this.length;
        }))();

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

0
user3161730 5 Янв 2014 в 08:50
Разве вы не можете сделать все, что нужно, с результатом непосредственно в обратном вызове .done()?
 – 
nnnnnn
5 Янв 2014 в 08:52
Мне это нужно из обратного вызова .done()?
 – 
user3161730
5 Янв 2014 в 08:55
Вам нужно будет предоставить больше контекста. Наиболее вероятным решением будет переместить все, что касается x, в обратный вызов done. Или слушайте события на collection и реагируйте на них.
 – 
mu is too short
5 Янв 2014 в 09:03
Мне нужно добавить строку, используя другую функцию, поэтому мне нужна эта переменная для них обоих.
 – 
user3161730
5 Янв 2014 в 09:06
Поэтому вызовите эту другую функцию из обратного вызова done. Или привяжите эту другую функцию к событиям коллекции.
 – 
mu is too short
5 Янв 2014 в 09:07

1 ответ

Лучший ответ

Назначьте переменную в самой функции done().

done(function() {
  //this runs when the asynchronous action is finished.
  var x = 'my value'; 
}))();

Невозможно узнать, что вы имеете в виду под своим комментарием, но похоже, что вы просто хотите сделать это:

done(function() {
  //this runs when the asynchronous action is finished.
  var x = this.length;
}))();

Но я понятия не имею, что означает this.length; ... поэтому не могу сказать. Возможно, некоторые данные доступны и для функции done() ... может быть, вам это нужно:

done(function(response) {
  //this runs when the asynchronous action is finished.
  var x = response;
}))();

Оттуда вы, вероятно, захотите связать функцию с обещанием - это технический вопрос, поэтому я просто дам простой ответ и скажу, что затем вы можете использовать обратный вызов для передачи x там, где вам это нужно:

done(function() {
  //this runs when the asynchronous action is finished.
  var x = this.length;
  someFunction(x);
}))();
0
m59 5 Янв 2014 в 09:06