私は幾分複雑なシナリオを持っており、Q.all
への私の呼び出しが解決された約束の配列を返していないのはなぜか分かりません。 jQuery $.ajax
コールとQ.
コールが混在しています。ここでは、セットアップは次のとおりです。Q.all()は解決された値の配列を返しません
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];
});
From the Q docs:各約束の履行 値を含む配列で満たされている約束を返し、または
promise.all()
却下される最初の約束である拒絶の理由が同じで拒否されます。
この場合、response
の値は、約束値の配列の代わりに単一のPromiseになります。これは私がデバッガを一時停止し、response
値が何であるかログインしたときにクローム開発ツールが生成するものです:
Promise {}
inspect:()
promiseDispatch:(resolve, op, operands)
valueOf:()
私はまだで私の頭を悩まてるもう一つは、ネットワーク要求がある一方で
.then
がヒットしてしまうことです
まだ保留中です。つまり、Q.all
に渡された配列の約束が保留中であることを意味します。
あなたの関数を呼び出す必要があります(。例えば、 'saveThing1()then') –
' saveThing1.thenを(返される約束のために) 'は' saveThing1()。then() 'でなければなりません。 – jfriend00
jQuery ajaxの約束は、かわいそうな獣です。彼らは本当に物事を混乱させることがある単一の価値観(完全に非標準的)には解決しません。 – jfriend00