Ответ 1
Функция when
не принимает массив отложенных событий. Скорее, вы передаете каждый отложенный в качестве отдельного аргумента. Именно это делает apply
.
Передача null
в apply
происходит только потому, что ожидаемый apply
: первый аргумент - это то, что должен быть установлен контекст функции при его вызове, а второй аргумент всегда является массивом, который будет расширен так, что функция будет вызываться так, как если бы все элементы массива были переданы в виде отдельных аргументов.
Так как для when
не имеет значения, какой контекст, с которым он вызван, null
работает так же хорошо, как и все остальное. Я предпочитаю передать его самому jQuery:
$.when.apply($, tasks).then(function () {
// Whatever
});
поскольку я думаю, что он выглядит чище, но это только я. Это не имеет никакого значения.
Если ваш браузер поддерживает собственный promises (или вы используете a polyfill), вы можете использовать его метод all
вместо этого, который непосредственно принимает массив promises:
Promise.all(tasks).then(function (values) {
// "values" is an array, with the results of each of the "tasks"
});