jQuery Deferreds, .pipe и исключения - PullRequest
2 голосов
/ 10 января 2012

У меня есть код, который выглядит примерно так (конечно, менее смешно):

var d = $.Deferred();
d.pipe(function() {
    throw "a";
}).then(function() {
    console.log("good!");
}, function(e) {
    console.log("I want the exception here");
});
d.resolve();

Проблема заключается в том, что выбрасывание исключения в .pipe doneFilter, похоже, не заставляет jQuery рассматривать его как сбой, и это приводит к необработанному исключению в doneFilter.

Альтернативой является создание нового отложенного и создание блока try-catch вокруг doneFilter, но мне было интересно, есть ли лучший способ сделать это.

1 Ответ

2 голосов
/ 10 января 2012

Если вам нужно использовать throw, действительно лучше поймать его в doneFilter и return $.Deferred().reject('a') (или в любом другом) из него по ошибке.Обратный вызов fail в then будет вызываться с аргументом, который вы передаете.

...