Javascript then() 链接 - 第二个 then() 对应于哪个 Deferred?
Javascript then() chaining - which Deferred does the second then() correspond to?
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() 的三个函数(三个参数)对应于来自 someAjax() 的 Deferred 对象的状态。
但是我不明白,second的三个函数(args)对应的是什么Deferred对象?例如,如果(或者是否可能)first then() 的三个函数中的每一个都可以 return 它自己的 Deferred 对象呢?
我觉得我可能误解了这里的内容。感谢任何澄清。
////////////////////////////////////////// ///////
2) 我有另一个这样的链接:
$.getJSON(url).then(
doneFunction1,
errorFunction1
).then(
doneFunction2
});
doneFunction1 看起来像这样:
function doneFunction1(val){
if(val > 1)
return $.ajax(url2);
}
因此,正如您所见,这并不总是 return 的承诺,具体取决于 val
。
如果它不是 return Promise(例如 val < 1),那么第二个将如何进行?那会导致错误吗?因为据我了解,没有调用 then() 的 Promise。我的猜测是它可能只是调用 $.getJSON
的第一个 Promise 的 then() 但我可能错了。
基本上,当 `val < 1' 时,我尽量不使用第二个 then()
。可能吗?
您可以 return 已解决或拒绝的 Deferred
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
});
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() 的三个函数(三个参数)对应于来自 someAjax() 的 Deferred 对象的状态。
但是我不明白,second的三个函数(args)对应的是什么Deferred对象?例如,如果(或者是否可能)first then() 的三个函数中的每一个都可以 return 它自己的 Deferred 对象呢?
我觉得我可能误解了这里的内容。感谢任何澄清。
////////////////////////////////////////// ///////
2) 我有另一个这样的链接:
$.getJSON(url).then(
doneFunction1,
errorFunction1
).then(
doneFunction2
});
doneFunction1 看起来像这样:
function doneFunction1(val){
if(val > 1)
return $.ajax(url2);
}
因此,正如您所见,这并不总是 return 的承诺,具体取决于 val
。
如果它不是 return Promise(例如 val < 1),那么第二个将如何进行?那会导致错误吗?因为据我了解,没有调用 then() 的 Promise。我的猜测是它可能只是调用 $.getJSON
的第一个 Promise 的 then() 但我可能错了。
基本上,当 `val < 1' 时,我尽量不使用第二个 then()
。可能吗?
您可以 return 已解决或拒绝的 Deferred
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
});