【发布时间】:2013-09-24 10:39:57
【问题描述】:
我目前使用的是 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 Promise 做到这一点?
【问题讨论】: