Ich habe ein etwas kompliziertes Szenario und ich verstehe nicht ganz, warum mein Aufruf an Q.all
keine Reihe von aufgelösten Versprechen zurückgibt. Es ist eine Mischung aus jQuery $.ajax
Anrufe und Q.
Anrufe. Hier ist die Einstellung:Q.all() liefert kein Array aufgelöster Werte
var saveThing1 = function(){
return $.ajax({...});
}
var saveThing2 = function(){
return $ajax({...});
}
var deleteThing2 = function(){
return $.ajax({...});
}
saveThing1.then(function(){
var promiseArr = [saveThing2(), saveThing2(), deleteThing2()];
return Q.all(promiseArr);
}).then(function(response){
var result1 = response[0];
var result2 = response[1];
var result3 = response[2];
});
promise.all()
Gibt ein Versprechen, die mit einem Array mit den Erfüllungswert jedes Versprechen erfüllt ist, oder wird mit dem gleichen Ablehnungsgrund abgelehnt, wie das erste Versprechen abgelehnt wurde.
Der Wert von response
endet in diesem Fall als das einzige Versprechen anstelle des Arrays der Versprechenswerte. Dies ist, was die Chrome Dev-Tools erzeugt, wenn ich den Debugger anhalten und melden Sie sich, was der response
Wert ist:
Promise {}
inspect:()
promiseDispatch:(resolve, op, operands)
valueOf:()
andere Sache, die ich noch in meinem Kopf bin Kratzen ist, dass die .then
während die Netzwerk getroffen wird Anfragen sind noch ausstehend, was bedeutet, dass die Versprechen in dem Array, das an Q.all
übergeben wurde, ebenfalls anhängig sein sollten ...
Sie benötigen Funktionen aufgerufen werden (zB 'saveThing1() then'.) Für ein Versprechen –
zurückgegeben werden' saveThing1.then () 'sollte' saveThing1() sein. then() '. – jfriend00
jQuery Ajax Versprechen sind ein verrücktes Biest. Sie lösen sich nicht auf einen einzelnen Wert auf (was völlig nicht standardgemäß ist), was manchmal wirklich Dinge durcheinander bringen kann. – jfriend00