我在数组allFunctions
中有很多函数。我希望它们一个接一个地执行,它们之间有延迟。我能想到的最接近的是:
result = Q();
allFunctions.forEach(function(fn) {
result = result.then(fn).delay(1000);
})
这可能与Q.all
语法有关吗?
提前谢谢你:)
答案 0 :(得分:3)
不是以有意义的方式,承诺是已经开始的操作,Q.all
等待所有操作一起完成。
您目前拥有的是执行此操作的常用方法,它与同步版本(具有睡眠的for循环)非常相似。
您可以使用Array.prototype.reduce
稍微缩短一点:
var result = allFunctions.reduce(function(prev,fn){
return prev.then(fn).delay(1000);
},Q());
答案 1 :(得分:2)
您可以在函数之间嵌套Q().delay( 1000 )
这意味着你必须将你的函数数组映射到:
function delay(){ return Q.delay(1000); }
var functions = [ f1, delay, f2, delay, f3 ];
Q.all
不会按顺序运行您的功能,您使用prev.then
执行的操作是一个有趣的黑客,但您也可以按照Q建议的方式运行它(更多信息请https://github.com/kriskowal/q#sequences ):
var results = functions.reduce(Q.when, Q(initialVal));
在函数数组中插入延迟也将提供对延迟的更多控制(如果您最终需要不同的时间延迟)