我目前正在使用 jQuery 1.9.1。
我正忙于链接两个 Promise,以便它们都在处理结果之前执行,但我只关心将第二个 Promise 的结果传递给调用者。
我的第一次尝试如下(也请忽略我没有处理错误案例):
function doSomething() {
var firstPromise = $.Deferred(function(dfd) { dfd.resolve(1); }).promise();
var secondPromise = $.Deferred(function(dfd) { dfd.resolve(2); }).promise();
var grouped = $.when(firstPromise, secondPromise);
grouped.then(function(firstResult, secondResult){
return secondResult;
});
return grouped
}
doSomething.then(function(a, b) {
console.log(arguments); // will be [1, 2], correspondingly a=1, b=2
});
但可以看出,返回的不仅是第二个结果,而是两个结果。我最初认为,因为 group.then 只返回 secondResult,所以只有 this 会传递给调用者。
我的第二次尝试解决了这个问题,但需要使用另一个 deferred 来实现:
function doSomething() {
var firstPromise = $.Deferred(function(dfd) { dfd.resolve(1); }).promise();
var secondPromise = $.Deferred(function(dfd) { dfd.resolve(2); }).promise();
var grouped = $.when(firstPromise, secondPromise);
var promise = $.Deferred(function(dfd) {
grouped.then(function(a, b) {
dfd.resolve(b);
});
}).promise();
return promise;
}
doSomething().then(function(result) {
console.log(result); // will be 2
});
在这里,我只是创建了一个新的 Promise,它仅使用分组 Promise 的第二个结果来解决,并返回该 Promise。
这一切都很好,但是是否有更简单的方法可以使用 jQuery 承诺来做到这一点?