我在数组allFunctions
中有一堆函数。我希望它们一个接一个地执行,其间有延迟。我能想到的最接近的是:
result = Q();
allFunctions.forEach(function(fn) {
result = result.then(fn).delay(1000);
})
这是可能做与Q.all
语法吗?
提前感谢:)
不是以一种有意义的方式,承诺是一个已经开始的操作,Q.all
等待所有动作一起完成。
你目前拥有的是做这件事的常用方法,它非常类似于同步版本(一个带有sleep的for循环)。
你可以用Array.prototype.reduce
来缩短它:
var result = allFunctions.reduce(function(prev,fn){
return prev.then(fn).delay(1000);
},Q());
可以在函数之间嵌套一个Q().delay( 1000 )
这意味着您必须将函数数组映射到:
function delay(){ return Q.delay(1000); }
var functions = [ f1, delay, f2, delay, f3 ];
Q.all
不会按顺序运行你的函数,你用prev.then
做的是一个有趣的hack,但你也可以按照Q建议的方式运行它(更多信息在这里https://github.com/kriskowal/q#sequences):
var results = functions.reduce(Q.when, Q(initialVal));
在函数数组中插入延迟也将提供对延迟的更多控制(如果您最终想要不同的时间延迟)