В приведенном ниже коде я звоню Pouch.sync()
, к которому я связываюсь deleteLocal()
. Pouch.sync()
выполняет localDb.sync()
, который не возвращает обещание, но я могу подключить обработчик события .on()
для обработки ошибок.
Я попытался сыграть с $ q.when и $ q.reject, но я не могу помешать deleteLocal()
от обстрела, если синхронизация завершилась неудачно, и onError()
никогда не выполняет (либо в качестве обратного вызова ошибки, либо в catch).
// Controller
function _onSyncClick() {
return Pouch.sync()
.then(deleteLocal, onError); // I do not want deleteLocal() to execute if Pouch.sync() fails
.catch(onError);
}
// Pouch service
function sync() {
return
localDb.sync(remoteDb)
.on('error', function (err) {
return $q.reject('Sync error.');
});
}
спасибо. Я вернул '$ q.reject()' в обработчик ошибок, но цепочечная функция все еще выполняется. Используя контрольные точки, я подтвердил, что обработчик ошибок действительно достигнут, но 'deleteLocal()' все еще выполняется после ошибки. Почему '$ q.reject()' не нарушает цепочку? – devthorne
Я случайно использовал '.when 'второй раз, я отредактировал свой ответ – svarog
', но deleteLocal() все еще выполняется после ошибки. ', Я предполагаю, что функция была вызвана' localDB.sync'. вы не можете запустить оба успеха и отклонить обработчики обещания – svarog