簡體   English   中英

將q個承諾的數組拆分為數據包並依次運行這些數據包

[英]Split an array of q promises into packets and run these packets in series

我的目標是復制文件並將並行復制的文件限制為已定義的變量。 因此,我將調用fs.copyq 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實現我的目標?

似乎幾乎所有任務都是在同一時間開始的。

是的,這是因為mapreduce都是同步的,遍歷所有數據包並立即創建所有任務。

相反,你需要把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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM