是否可以拒绝管道内的延期?
我想这样做:
function doPostStuff(sentData){
return $.post("postStuff.foo", sentData)
.pipe(function(returnedData){
if (returnedData.justDoIt != "YEAH BABY oO") {
return $.Deferred().reject('Error posting stuff', returnedData);
}
var finalData = transformResults(returnedData);
return finalData;
});
}
然后这样打电话:
doPostStuff(someData)
.done(function(finalData){
alert("you are here ! ");
})
.fail(function(message, failData){
alert(message);
});
但由于某些原因,我从未达到失败()。
我做错了吗?
谢谢!
EDIT。
所以我的代码没有错,毕竟它是服务器端问题。
只是为了证明我的观点,并证明请求仍然是异步的,尽管下面回答的人(在回答之前显然没有阅读Deferred详细信息的文档)是假装的:
doDeferredTest : function(){
return $.post("doMiniTest.foo")
.pipe(function(erb){
console.error("inside pipe at " + Date());
if(erb.status != 'SUCCESS'){
return $.Deferred().reject('Error posting stuff', erb);
}
return erb;
});
},
var done = false;
console.error("triggereing Do deffered test at " + Date());
doDeferredTest().done(function(){
done = true;
console.error("inside done at " + Date());
})
.fail(function(){
console.error("failed at " + Date());
});
console.error("after doDeferredTest triggered " + Date() + " done = " + done);
如果延迟服务器响应,您应该在控制台中看到请求确实是异步的,并且失败在管道内正确触发。与下面的预备相反,不需要中间偏转的对象,因为$ .post返回一个可以与其他自定义方法链接的承诺。