所以我的 API 期望当特定的延迟得到解决时,它会获得 2 个参数。
fn().done(function(arg1, arg2) {
console.log(arg1, arg2);
}).fail(function(err) {
console.error(err);
});
现在涉及到fn
上面的函数,在解析之前需要先等待其他延迟返回。
function other() {
// stubbed out to always resolve
return $.Deferred().resolve().promise();
}
function fn() {
return other().then(function() {
return [1, 2];
});
}
但这是行不通的,因为arg1
将作为[1, 2]
and arg2
将undefined
。我不知道如何从Deferred.then()
第一个成功过滤函数参数,以便生成的管道延迟解析具有多个参数。
我当然可以这样做:
function fn() {
var done = $.Deferred();
other().done(function(){
done.resolve(1, 2);
}).fail(function(){
done.reject.apply(done, arguments);
});
return done.promise();
}
但这并不像使用那么优雅.then()
现在我每次都需要担心负面失败案例 API,即使我知道我只是通过管道传输拒绝状态。
是的,我也可以改变fn()
api 来解析数组,但我真的希望有一个优雅的解决方案。