2014-12-11 1 views
1

Я действительно надеюсь, что есть что-то немое, что я делаю, но я не могу найти его.Ember.RSVP.all, похоже, сразу же решает

Я пытаюсь использовать Ember.RSVP.all в середине цепочки обещаний. Пример, который у меня есть, намного проще, чем мое использование, но это демонстрирует проблему. В середине цепочки обещаний у меня есть набор обещаний, которые все должны решить до того, как цепочка может продолжаться - именно то, что я понимаю, RSVP.all для.

К сожалению, когда я возвращаю объект RSVP.all, следующее обещание в цепочке выполняется немедленно, не дожидаясь обещаний, переданных всем().

Я создал Js скрипку, чтобы продемонстрировать наилучшим образом, что я могу думать: http://jsfiddle.net/3a9arbht/3/

Обратите внимание, что первый и второй как решить почти точно то же самое время, когда Второй должен быть после того, как 1s обещание возвращается. Третий и четвертый следуют так, как ожидалось.

Fiddle код выглядит следующим образом:

function delayAjax(delay) { 
    return Ember.$.ajax({ 
     url: '/echo/json/', 
     data: { 
      json: '', 
      delay: delay, 
     } 
    }); 
} 

delayAjax(1).then(function() { 
    Ember.$('#first').addClass('red'); 
    var proms = [delayAjax(1), delayAjax(1)]; 
    return Ember.RSVP.all(proms) 
}).then(function() { 
    Ember.$('#second').addClass('red'); 
    return delayAjax(1); 
}).then(function() { 
    Ember.$('#third').addClass('red'); 
    return delayAjax(1); 
}).then(function() { 
    Ember.$('#fourth').addClass('red'); 
}); 
+0

Это ссылка неправильно скрипка? – Bergi

+0

А, ты прав. Сожалею. Обновлено по правильной ссылке: http://jsfiddle.net/3a9arbht/3/ – Carl

ответ

0

Ответ подразумевает ответ на другой вопрос. Похоже, что в то время как ответ $.ajax действительно «thenable», это отложенный объект jQuery, а не Promise. Это мне не ясно, почему они не играют хорошо вместе, но решение просто преобразовать вызов Аякса обещания:

function delayAjax(delay) { 
    return Promise.resolve($.ajax({ 
     url: '/echo/json/', 
     data: { 
      json: '', 
      delay: delay, 
     } 
    })); 
} 

С рабочей скрипкой: http://jsfiddle.net/evilbuck/vqut9zy2/3/

+0

Я думал, что 'Ember. $. Ajax()' будет обещанием RSVP - похоже, что я не знаю Ember. – Bergi