Восстановление от отклоненных обещаний в JS
Я использую собственные обещания (в основном) и пытаюсь восстановиться после ошибки и продолжаю выполнять цепочку обещаний.
По сути, я делаю это:
REST-запрос, чтобы увидеть, существует ли ID.Обратите внимание, что это возвращает отложенный jquery..then (успех означает, что идентификатор существует, поэтому ошибка и остановка) (ошибка означает, что идентификатор не существует, поэтому продолжайте создавать идентификатор).then (создать идентификационную запись и отправить на сервер)Я возвращаю Promise.resolve () из моей отклоненной функции, что должно привести к выполнению успешной части следующего .then. Это не. Я пробовал это на Chrome и Safari.
Обратите внимание, что первое обещание на самом деле является отложенным запросом, но согласно этой странице (http://api.jquery.com/deferred.then/), deferred.then () возвращает объект обещания. Таким образом, добавление дополнительного .hen должно скрывать родные обещания.
Чтобы было понятнее - вот псевдокод:
promise = $.ajax(url);
promise = promise.then(); // convert to promise
promise.then(function() { cleanup(); return Promise.reject(); },
function(err) { return Promise.resolve(); });
.then(function() { createIdentityDetails(); });
.then(function() { sendIdentityDetails(); });
Обратите внимание, что я хочу FAIL, когда ajax возвращает успех, и я хочу продолжить обработку, когда вызов ajax завершился неудачно.
Что происходит, так это то, что функции FAIL для всех последующих частей .hen выполняются. То есть мой возврат Promise.resolve () не работает - что, я думаю, нарушает спецификацию.
Буду признателен за любые отзывы о том, как я могу справиться с ошибками в цепочках длинных обещаний и исправить их.
Большое спасибо за любой совет, который вы можете дать.
постскриптум создание и сбор полной идентификационной информации занимает довольно много времени, поэтому я не хочу этого делать, если идентификатор существует. Поэтому я хочу проверить сначала и быстро провалиться.
p.p.s Мне действительно нравится, как обещания разматывают эти глубоко вложенные цепочки асинхронных обратных вызовов.