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
});