所以我的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]
而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以解决数组,但我真的希望有一个优雅的解决方案。
答案 0 :(得分:17)
您必须调用resolve()
或reject()
才能传递多个参数。
.then()
不包含" 传播"的任何机制。退回的集合。它只是保持集合完整,作为第一个参数。
但是,它会与Deferred
或承诺相互作用。来自paragraph starting with "As of jQuery 1.8":
这些过滤器函数可以返回一个新值以传递给promise的.done()或.fail()回调,或者它们可以返回另一个可观察对象(Deferred,Promise等)它会将已解决/拒绝的状态和值传递给承诺的回调。
因此,您可以使用other()
的示例作为fn()
的基础,使其与另一个Deferred()
保持相当简洁:
function fn() {
return other().then(function () {
return $.Deferred().resolve(1, 2).promise();
});
}
fn().then(function (a, b) {
console.log(arguments.length, a, b); // 2 1 2
});
答案 1 :(得分:0)
传递给的回调可以返回一个新的$ .Deferred带有2个这样的参数:
function other() {
// stubbed out to always resolve
return $.Deferred().resolve().promise();
}
function fn() {
return other().then(function() {
return $.Deferred().resolve(1, 2).promise();
});
}
答案 2 :(得分:0)
使用ES6,您可以在public static void main (String[ ] args)
{
Scanner input = new Scanner(System.in);
System.out.print("Enter month number. [1..12] --> ");
int month = input.nextInt();
String MonthString;
switch (month)
{
case 1 : MonthString = "ZS"; break;
case 2 : MonthString = "CN"; break;
case 3 : MonthString = "YH"; break;
case 4 : MonthString = "MT"; break;
case 5 : MonthString = "CL"; break;
case 6 : MonthString = "SS"; break;
case 7 : MonthString = "WM"; break;
case 8 : MonthString = "WY"; break;
case 9 : MonthString = "SH"; break;
case 10 : MonthString = "YJ"; break;
case 11 : MonthString = "XG"; break;
case 12 : MonthString = "HZ"; break;
default : System.out.print("This is not a valid month number.");
}
System.out.println(MonthString);/*This is where it won't compile*/
}
中使用散布运算符传递可变数量的参数,并使用$.when()
链接成功函数
.done(//syntax)