[英]Split an array of q promises into packets and run these packets in series
我的目標是復制文件並將並行復制的文件限制為已定義的變量。 因此,我將調用fs.copy
的q
promise數組拆分為fs.copy
數據包,然后使用reduce函數fs.copy
運行這些數據包。
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([]));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.