jQuery 3.0.0 を使用すると、
$(function() {
var n = 5;
function jQueryWhenApplyResolveRejectWith(n) {
var arr = $.map(Array(5), function(_, i) {
return $.Deferred();
});
var obj = {
"index": null
};
var promises = $.when.apply(null, arr.map(function(promise, i) {
return i < n
? promise.resolveWith(obj, [i])
: promise.rejectWith((obj.index = i, obj)
, [new Error(i + " is not less than " + n)])
}));
function success(...result) {
console.log("resolved, result:", result, "this:", this);
}
function err(error) {
console.log("rejected, error:", error, "this:", this);
}
return promises.then(success, err);
}
jQueryWhenApplyResolveRejectWith(n)
.then($.proxy(jQueryWhenApplyResolveRejectWith, null, --n))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js">
</script>
への最初の呼び出しは、 にチェーンされたjQueryWhenApplyResolveRejectWith
解決済みの jQuery promise 値の配列を返す必要があります。ここで、 はオブジェクトの配列です。.then()
promises
this
obj
への 2 番目の呼び出しは、単一のオブジェクトに設定されたjQueryWhenApplyResolveRejectWith
を返す必要があります。Error
this
obj
単一のオブジェクトが に渡されたため、 の予期される結果はsuccess
singleにthis
設定されます。obj
deferred.resolveWith
期待される結果は返されませんが、javascript
at stacksnippets では、.bind()
または$.proxy()
at.then()
チェーンを使用して単一のオブジェクトを返すことができますpromises
。
$(function() {
var n = 5;
function jQueryWhenApplyResolveRejectWith(n) {
var arr = $.map(Array(5), function(_, i) {
return $.Deferred();
});
var obj = {
"index": null
};
var promises = $.when.apply(null, arr.map(function(promise, i) {
return i < n
? promise.resolveWith(obj, [i])
: promise.rejectWith((obj.index = i, obj)
, [new Error(i + " is not less than " + n)])
}));
function success(...result) {
console.log("resolved, result:", result, "this:", this);
}
function err(error) {
console.log("rejected, error:", error, "this:", this);
}
return promises.then($.proxy(success, obj), err);
}
jQueryWhenApplyResolveRejectWith(n)
.then($.proxy(jQueryWhenApplyResolveRejectWith, null, --n))
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js">
</script>
質問:
this
に渡されたプレーン オブジェクトから配列に変換されるの はなぜですか.resolveWith()
。に渡された同じオブジェクトは、パターン.rejectWith()
を使用して単一のオブジェクトを返しますか?$.when.apply()
$.when.apply()
or.resolveWith()
、または両方を同じ手順で使用した場合の予想される動作は、解決された jQuery promise オブジェクトの数を乗算したthis
元を含む配列に設定されますか?this