$ .whenは、1つ以上のDeferredオブジェクトが渡されるかどうかによって動作が異なります。この動作はドキュメントに記載されていますが、問題は、2つの異なるコードパスを記述しなければならないことです。
function foo (dfds) {
$.when.apply(this, dfds).done(function() {
console.log(arguments);
});
}
ケースI:
foo([$.getJSON("http://freegeoip.net/json/8.8.8.8"),
$.getJSON("http://freegeoip.net/json/8.8.8.9")]);
....
/* Output (what I'd come to expect) */
[Array[3], Array[3]]
ケースII:
foo([$.getJSON("http://freegeoip.net/json/8.8.8.8")]);
....
/* Output (the original unwrapped deferred's arguments) */
[Object, "success", Object]
dfd
長さやタイプをチェックせずにこれをエレガントに処理する方法はありarguments
ますか?