将一组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
实现我的目标?
看来,几乎所有的任务都是在同一时间开始的。
是的,那是因为map
和reduce
都是同步的,迭代所有数据包并立即创build所有任务。
相反,您需要将q.nfcall(fs.copy, …)
调用放在previous.then
callbackq.nfcall(fs.copy, …)
使用.bind()
隐藏起来,这样就可以很好地隐藏起来),所以只有在previous
parsing:
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([]));