以下のコードでは、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
私は2回目に誤って '.when'を使用しました。答えは – svarog
ですが、エラー後にdeleteLocal()がまだ実行されています。'私の推測では、関数は 'localDB.sync'によって呼び出されました。あなたは約束のハンドラーを成功と拒否の両方で実行することはできません – svarog