/ / Ember.RSVP.all parece resolverse inmediatamente - javascript, ember.js, rsvp.js

Ember.RSVP.all parece resolver inmediatamente - javascript, ember.js, rsvp.js

Realmente espero que haya algo tonto que estoy haciendo, pero parece que no puedo encontrarlo.

Estoy tratando de usar Ember.RSVP.todo en medio de una cadena de promesas. El ejemplo que tengo es mucho más simple que mi uso, pero demuestra el problema. En medio de una cadena de promesas, tengo un conjunto de promesas que todos deben resolver antes de que la cadena pueda continuar, exactamente para lo que entiendo RSVP.

Desafortunadamente, cuando devuelvo el objeto RSVP.all, la próxima promesa de la cadena se ejecuta de inmediato, sin esperar a que las promesas pasen a todos ().

He configurado un violín js para demostrar de la mejor manera que se me ocurre: http://jsfiddle.net/3a9arbht/3/

Tenga en cuenta que Primero y Segundo se resuelven casi exactamente al mismo tiempo, cuando Segundo debería ser después de que regrese la promesa de 1 Tercero y cuarto siguen como se esperaba.

El código de violín se ve así:

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");
});

Respuestas

0 para la respuesta № 1

Respuesta basada en una respuesta a otra pregunta. Parece que mientras el $.ajax La respuesta es "posible", es un objeto diferido jQuery, no una promesa. No me queda claro por qué no juegan bien juntos, pero la solución es simplemente convertir la llamada ajax en una promesa:

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

Con un violín de trabajo: http://jsfiddle.net/evilbuck/vqut9zy2/3/