我正在尝试使用自定义延迟对象来管理一些回调。我想出了一个简单的案例:
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
,同时在其他地方解决它?