将一个q promise数组拆分为多个数据包,并依次运行这些数据包
Split an array of q promises into packets and run these packets in series
我的目标是复制文件,并将并行复制的文件限制为定义的变量。因此,我将调用fs.copy
的q
承诺数组拆分为数据包,并使用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
都是同步的,在所有数据包上迭代并立即创建所有任务。
相反,您需要将q.nfcall(fs.copy, …)
调用放在previous.then
回调中(您已经用.bind()
非常优雅地隐藏了),这样它们只会在previous
解析后被调用:
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([]));
相关文章:
- Javascript-如何让脚本与Ajax请求的数据一起运行
- 在侦听特定端口时接收广播的数据包
- Modx数据包管理器ext-all.js错误
- 从Node.js UDP发送大量小数据包;Don’不要全部寄出去
- WebRTC是否为您处理数据包丢失和数据包接收确认等,或者您是否需要为此编写自己的解决方案
- 如何在加载所有数据时运行函数
- 如果在节点 JS 中落后于 Socket.IO,则丢弃数据包
- Socket.io 数据包在断开连接和重新连接之间丢失
- 节点.JS Socket.IO 将数据包发送到特定连接 ID
- 将一个q promise数组拆分为多个数据包,并依次运行这些数据包
- 如何通过本地大于1500字节的UDP数据包发送浮点值并对其进行解析
- Javascript CORS被阻止,但仍在数据包捕获中显示数据
- 如何在每次使用ajax从WebMethod加载数据时运行脚本
- JavaScript:调用已启动类(数据包处理程序)的变量函数
- 如何在EDGE.js(nodeJS.NET数据包)中重用代码
- Windows RT应用程序未接收UDP数据报数据包.微软DatagramSample中我的nor中的以太币
- 将.CSV数据导入Javascript,并在字符串包含数据时运行execute
- 您应该在socket.io中手动批处理可扩展应用程序的数据包吗
- 什么'这是一种在从数据URI运行的javascript中不旋转的睡眠方式
- 套接字.IO初始数据包