У меня есть ситуация, когда у меня есть несколько функций, которые возвращают отложенные объекты. Я передаю эти отложенные объекты в $.when()
и выполняет обратный вызов then()
, когда все отложенные объекты разрешены.Как всегда запускать jQuery, тогда() обратный вызов?
$.when(func1(), func2(), func3()).then(function() {
alert('Hello World!');
});
Иногда ни один из трех функций не возвращает никакого отложенного объекта, в этом случае then()
обратного вызова никогда не выполняется. Есть ли чистый способ убедиться, что обратный вызов then()
всегда вызывается?
'then()' будет по-прежнему ссылаться на свой обработчик успеха, если ни одно из значений, переданных в '.when()', не является отложенными объектами (например, '$ .when (" a "," b "," c "), .then (function() {alert ("foo");}); 'будет предупреждать' foo'). Вы имеете в виду обработчик ошибок? –
@ FrédéricHamidi Интересный момент! Поэтому, чтобы всегда выполнять обратный вызов успеха, я думаю, мы также можем попробовать $ .when ("a", deferred_object_1, deferred_object_2). Then (callback). – craftsman
Если и 'deferred_object_1', и' deferred_object_2' будут разрешены позже, тогда да. Однако, как только один из них будет отклонен, обработчик отказа (второй аргумент 'then()') будет вызван, и обработчик успеха будет забыт. –