jQueryDeferred
系统的一种用途是使用$.when()
函数。它需要可变数量的Promise's and will do something when they all
resolve (or when the first
reject`s。)
因此,如果您想对两个 AjaxJSON
查询进行操作,例如,您可以这样做:
var funkyPromise = $.getJSON('http://funky.json.service.com');
var awesomePromise = $.getJSON('http://awesome.json.service.com');
$.when(funkyPromise, awesomePromise).then(function() {
/* do something amazing with the two objects */
}, function() {
/* at least one of the services failed this time */
});
使用 jQuery 系统可以做的另一件事是在最终使用它之前,通过使用该方法将数据从一个到另一个Deferred
“链接”来创建数据管道:Deferred
pipe
$.getJSON('http://funky.json.service.com')
.pipe(funkytoFunkier);
}).done(function(funkyData) {
/* we now have a funkier version of what the web service gave us */
});
一切都奇妙地异步和解耦。
但是,如果我想$.when()
在两个 asynchronous Promise
s 上使用,但我们还没有其中一个,因为它将pipe
异步通过,会发生什么?
var funkyPromise = $.getJSON('http://funky.json.service.com');
var awesomePromise = $.getJSON('http://awesome.json.service.com');
// run "funky" through an asynchronous "pipe" to get "funkier"
//
// ... but ... how ??
$.when(funkyier, awesome).then(function() {
/* do something amazing with the two objects */
}, function() {
/* at least one of the services failed this time */
});
那么中间部分是什么?
- 是不是很明显,我就是看不到?
- 有没有可能,但有些微妙和棘手?
- 一些新的“倒置”等价物
pipe()
会$.when()
让它更容易吗?