gpt4 book ai didi

javascript - 嵌套 Node async.eachSeries

转载 作者:数据小太阳 更新时间:2023-10-29 05:07:45 25 4
gpt4 key购买 nike

和async module纠缠了半天,嵌套的层数少,还是无法正常工作。

所以这工作正常:

    var async = require('async')    var myarr = ["Outer - A", "Outer - B"];    var myarr2 = ["Inner - A", "Inner - B"];    var innerComplete = true;    async.eachSeries(myarr, function( item, outerCallback) {        console.log('Processing item ' + item);        async.series([            function(callback) {                takeTime(2000, item, callback)            },            function(callback) {                takeTime(1000, item, callback)            },            function(callback) {                outerCallback();            }        ], function(err) {            console.log("---OUTER SEQUENCE---")        })    }, function(err){        console.log("---OUTER LOOP---")    });    function takeTime(ms, msg, callback) {        console.log("Starting " + ms + " ms task from " + msg);        setTimeout( function() {             console.log("Finished " + ms + " ms task from " + msg);            callback();        }, ms);    } 

它会像这样按顺序很好地输出所有内容:

Processing item Outer - AStarting 2000 ms task from Outer - AFinished 2000 ms task from Outer - AStarting 1000 ms task from Outer - AFinished 1000 ms task from Outer - AProcessing item Outer - BStarting 2000 ms task from Outer - BFinished 2000 ms task from Outer - BStarting 1000 ms task from Outer - BFinished 1000 ms task from Outer - B---OUTER LOOP---

但是当我尝试像这样嵌套另一个 eachSeries 循环时:

    var async = require('async')    var myarr = ["Outer - A", "Outer - B"];    var myarr2 = ["Inner - A", "Inner - B"];    var innerComplete = true;    async.eachSeries(myarr, function( item, outerCallback) {        console.log('Processing item ' + item);        async.series([            function(callback) {                takeTime(2000, item, callback)            },            function(callback) {                takeTime(1000, item, callback)            },            function(callback) {                async.eachSeries(myarr2, function( item2, outerCallback2) {                    console.log('Processing item ' + item2);                    async.series([                        function(callback2) {                            takeTime(2000, item2, callback2)                        },                        function(callback2) {                            takeTime(1000, item2, callback2)                        }                    ], function(err) {                        console.log('---INNER SEQUENCE---')                    })                }, function(err){                    console.log("---INNER LOOP---")                });                outerCallback();            }        ], function(err) {            console.log("---OUTER SEQUENCE---")        })    }, function(err){        console.log("---OUTER LOOP---")    });    function takeTime(ms, msg, callback) {        console.log("Starting " + ms + " ms task from " + msg);        setTimeout( function() {             console.log("Finished " + ms + " ms task from " + msg);            callback();        }, ms);    } 

它在进入第二个 eachSeries 循环时丢失了执行顺序,如下所示:

Processing item Outer - AStarting 2000 ms task from Outer - AFinished 2000 ms task from Outer - AStarting 1000 ms task from Outer - AFinished 1000 ms task from Outer - AProcessing item Inner - AStarting 2000 ms task from Inner - AProcessing item Outer - BStarting 2000 ms task from Outer - BFinished 2000 ms task from Inner - AStarting 1000 ms task from Inner - AFinished 2000 ms task from Outer - BStarting 1000 ms task from Outer - BFinished 1000 ms task from Inner - A---INNER SEQUENCE---Finished 1000 ms task from Outer - BProcessing item Inner - AStarting 2000 ms task from Inner - A---OUTER LOOP---Finished 2000 ms task from Inner - AStarting 1000 ms task from Inner - AFinished 1000 ms task from Inner - A---INNER SEQUENCE---

我还尝试了 waterfall 、mapSeries 等,但执行顺序相同或困惑。是我做错了什么还是异步模块不支持这种嵌套?

最佳答案

您没有调用 outerCallback2,您没有调用 callback,而是立即调用了 outerCallback

固定:

async.eachSeries(myarr, function( item, outerCallback) {
,----------------------------------------'
| console.log('Processing item ' + item);
| async.series([
| function(callback) {
| `--------------,
| takeTime(2000, item, callback)
| },
| function(callback) {
| `--------------,
| takeTime(1000, item, callback)
| },
| function(callback) {
| ,-----------'
| | async.eachSeries(myarr2, function( item2, outerCallback2) {
| | ,---------------------------------------------'
| | | console.log('Processing item ' + item2);
| | | async.series([
| | | function(callback2) {
| | | takeTime(2000, item2, callback2)
| | | },
| | | function(callback2) {
| | | takeTime(1000, item2, callback2)
| | | }
| | | ], function(err) {
| | | console.log('---INNER SEQUENCE---')
| | `---> outerCallback2(err); // <<<
| | })
| | }, function(err){
| | console.log("---INNER LOOP---");
| `---> callback(err); // <<<
| });
| }
| ], function(err) {
| console.log("---OUTER SEQUENCE---")
`---> outerCallback(err); // <<<
})
}, function(err){
console.log("---OUTER LOOP---")
console.log("everything done");
});

关于javascript - 嵌套 Node async.eachSeries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25712767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com