1)我有一个jquery then()链,如下所示:
someAjax().then(function(val) { console.log("done 1: " + val); return val + 1; },
function(val) { console.log("fail 1: " + val); return val + 2; },
function(val) { console.log("prog 1: " + val); return val + 3; }
).then(function(val) { console.log("done 2: " + val) },
function(val) { console.log("fail 2: " + val) },
function(val) { console.log("prog 2: " + val) }
)
据我所知, first then()的三个函数(三个args)对应于someAjax()中Deferred对象的状态。
但是,我不明白,延迟对象做什么 second 的三个函数(args)对应?例如,如果(或者有可能) first then()的三个函数中的每一个都可以返回其自己的Deferred对象,该怎么办?
我觉得我可能会在这里误解一些东西。感谢任何澄清。
/////////////////////////////////////////////// /////
2)我有另一个这样的链接:
$.getJSON(url).then(
doneFunction1,
errorFunction1
).then(
doneFunction2
});
doneFunction1如下所示:
function doneFunction1(val){
if(val > 1)
return $.ajax(url2);
}
因此,根据val
,这并不总是会返回一个承诺。
如果它没有返回Promise(比如val< 1),那么第二个怎么办呢?这会导致错误吗?因为据我所知,没有Promise可以调用then()。我的猜测是它可能只调用$.getJSON
的第一个Promise的then(),但我可能错了。
基本上,当'val<时,我试图不要有第二个then()
。 1&#39 ;.有可能吗?
答案 0 :(得分:1)
您只需返回已解决或已拒绝的延期
function doneFunction1(val){
if(val > 1) {
return $.ajax(url2);
} else {
var def = $.Deferred();
return def.reject(); // or def.resolve('something'); to hit the success handler
}
}
$.getJSON(url).then(
doneFunction1,
errorFunction1
).then(
doneFunction2,
errorFunction2 // only needed if you want to catch the error
});