【问题标题】:Javascript then() chaining - which Deferred does the second then() correspond to?Javascript then() 链接 - 第二个 then() 对应于哪个 Deferred?
【发布时间】:2016-04-04 04:07:40
【问题描述】:

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 对象的状态。

但是我不明白,那么的三个函数(args)分别对应什么Deferred对象呢?例如,如果(或有可能)first then() 的三个函数中的每一个都可以返回其自己的 Deferred 对象,该怎么办?

我觉得我可能在这里误解了一些东西。感谢任何澄清。

/////////////////////////////////////// /////

2) 我有另一个这样的链接:

$.getJSON(url).then(
                doneFunction1,
                errorFunction1
            ).then(
                doneFunction2
            });

doneFunction1 如下所示:

function doneFunction1(val){
   if(val > 1)
      return $.ajax(url2);
}

因此,如您所见,这并不总是返回一个承诺,具体取决于val。 如果它没有返回 Promise(比如 val $.getJSON 的第一个 Promise 的 then() 但我可能错了。

基本上,当 `val then()。有可能吗?

【问题讨论】:

  • 它指的是你从第一个 .then 承诺返回的任何内容
  • .then 一般只需要两个函数,第一个在promise解析时调用,第二个在promise被拒绝时调用?
  • 请注意您使用的是 jQuery,而不是正确的 A+ 承诺,在这里非常重要!
  • @adeneo:一些 Promise 实现内置了进度报告,比如 Kris Kowal 著名的 Q lib
  • @TamasHegedus - 和 jQuery,但原生承诺没有,原生 .then 方法只接受两个回调,这就是我问的原因,在 OP 编辑​​问题之前,很明显 jQuery 是正在使用。

标签: javascript promise deferred


【解决方案1】:

您可以只返回已解决或拒绝的 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
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2013-06-17
    • 2015-12-31
    • 2016-01-09
    • 2020-11-29
    • 2014-07-19
    相关资源
    最近更新 更多