【发布时间】:2016-12-16 22:24:10
【问题描述】:
我有一个关于 jquery 承诺级联的问题,我想简化它。我有一个正在工作的级联函数(func1)。我在执行下一个功能之前设置了 2 秒超时。我想复制并将其转换为数组缩减形式(func2),但它不像 func1 那样工作(超时不一样)。代码如下:
var Makes=[1,2,3,5,8];
$(document).ready(function(){
//func1(); //WORKS
func2(); //NOT WORKS LIKE func1
});
function func1(){
timeout().then(function(){
console.log("1");
return timeout();
}).then(function(){
console.log("2");
return timeout();
}).then(function(){
console.log("3");
return timeout();
}).then(function(){
console.log("4");
return timeout();
}).then(function(){
console.log("5");
return timeout();
});
}
function func2(){
/*Makes.reduce(function(Models,Idx){
return timeout().then(function(){
console.log(Idx);
return timeout();
//return $.when(timeout());
});
},0);*/
Makes.reduce(function(Models,Idx){
return Models.then(function(){
return timeout().then(function(){
console.log(Idx);
return timeout();
//return $.when(timeout());
});
});
},0);
}
function timeout(){
var d = $.Deferred();
setTimeout(function(){
console.log("wait for 2 sec!");
d.resolve();
},2000);
return d.promise();
}
【问题讨论】:
-
因为reduce函数不处理promise并等待它被解决
-
你想在这里实现什么
-
我想让 func2 的行为与 func1 相同,但使用数组 reduce 代替
-
我编辑了 func2 来处理 Models.then 中的 timeout() 但也没有工作。现在我收到一个错误“Models.then 不是函数”