将一组q个promise发送到数据包中,并连续运行这些数据包

我的目标是复制文件并将并行复制的文件限制为一个已定义的variables。 因此,我将fs.copy调用拆分成了一组数据包,并使用reduce函数串行运行这些数据包。

 var promise = _.reduce(packets, function (previous, packet) { var map = _.map(packet, function (file) { return q.nfcall(fs.copy, file.source, file.target); }); return previous.then(q.all.bind(null, map)); }, q()); 

如何用q实现我的目标?

看来,几乎所有的任务都是在同一时间开始的。

是的,那是因为mapreduce都是同步的,迭代所有数据包并立即创build所有任务。

相反,您需要将q.nfcall(fs.copy, …)调用放在previous.thencallbackq.nfcall(fs.copy, …)使用.bind()隐藏起来,这样就可以很好地隐藏起来),所以只有在previousparsing:

 var promise = _.reduce(packets, function (previous, packet) { return previous.then(function(packetresult) { var map = _.map(packet, function (file) { return q.nfcall(fs.copy, file.source, file.target); }); return q.all(map); // optionally, also pass the previous packetresult }); }, q([]));