kooh-q-hook

いわゆる一つの技術メモ

jQuery.when でも 配列を引数に取りたい

Promise.all みたいに!

でも jQuery.when の引数は一つまたはそれ以上のDeferredオブジェクト。
引数はカンマ区切りで指定されるものであって、配列ではない……。

というのは、Function.prototype.call と Function.prototype.apply の関係に似ています。
apply は配列形式の引数を用いて関数を呼び出すメソッドです。これを使います。

$.when.apply($, deferredArray);

使ってみる

var dataArray = [1,2,3];

var deferredArray = dataArray.map(function produceNewArray (data) {
  return $.post(url, data, success, dataType);
});

$.when.apply($, deferredArray).then(function doneFilter () {
  // resolved
}, function failFilter () {
  // failed
});

やりやがりましたね!