2013-03-16 1 views
2

У меня есть ситуация, когда у меня есть несколько функций, которые возвращают отложенные объекты. Я передаю эти отложенные объекты в $.when() и выполняет обратный вызов then(), когда все отложенные объекты разрешены.Как всегда запускать jQuery, тогда() обратный вызов?

$.when(func1(), func2(), func3()).then(function() { 
    alert('Hello World!'); 
}); 

Иногда ни один из трех функций не возвращает никакого отложенного объекта, в этом случае then() обратного вызова никогда не выполняется. Есть ли чистый способ убедиться, что обратный вызов then() всегда вызывается?

+0

'then()' будет по-прежнему ссылаться на свой обработчик успеха, если ни одно из значений, переданных в '.when()', не является отложенными объектами (например, '$ .when (" a "," b "," c "), .then (function() {alert ("foo");}); 'будет предупреждать' foo'). Вы имеете в виду обработчик ошибок? –

+0

@ FrédéricHamidi Интересный момент! Поэтому, чтобы всегда выполнять обратный вызов успеха, я думаю, мы также можем попробовать $ .when ("a", deferred_object_1, deferred_object_2). Then (callback). – craftsman

+0

Если и 'deferred_object_1', и' deferred_object_2' будут разрешены позже, тогда да. Однако, как только один из них будет отклонен, обработчик отказа (второй аргумент 'then()') будет вызван, и обработчик успеха будет забыт. –

ответ

5

Вы можете использовать .always() вместо .then(), который будет выполняться независимо.

+1

Красивая! Спасибо за ответ. – craftsman