カスタム遅延オブジェクトを使用して、いくつかのコールバックを管理しようとしています。簡単なケースを見つけました:
var deferred = $.Deferred();
deferred.done(function() {
console.log( 'done' );
});
var json = $.getJSON('/foo');
json.then(
function() {
deferred.resolveWith(this, arguments);
}
);
しかし、解決/拒否する前に応答を検査する必要があります。次のようなものを追加したいと思います。
deferred.pipe(
function(response) {
if (response.message === 'error') {
return $.Deferred.reject(response);
}
return response;
}
);
しかし、そうすると、元のdone()
コールバックは関係なく常に呼び出されます。deferred.resolveWith()
それは、電話をかけてから「ロールバック」して後で拒否としてマークするには遅すぎるからだと確信しています。条件を の最初の引数に移動できることはわかっていますがjson.then()
、それは遅延オブジェクトのポイントを見逃しているようです。
deferred
条件付きとコールバックの両方を他の場所で解決しながら入れることは可能ですか?