如何使用Q.all with delay



我在数组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));

在函数数组中插入延迟也将提供对延迟的更多控制(如果您最终想要不同的时间延迟)

最新更新