【发布时间】: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