如何使用Q.all延迟?

时间:2014-07-04 18:44:27

标签: node.js promise q

我在数组allFunctions中有很多函数。我希望它们一个接一个地执行,它们之间有延迟。我能想到的最接近的是:

result = Q();

allFunctions.forEach(function(fn) {
  result = result.then(fn).delay(1000);
})

这可能与Q.all语法有关吗?

提前谢谢你:)

2 个答案:

答案 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));

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