在map.js中使用瀑布

时间:2017-06-02 06:46:15

标签: javascript node.js mongodb asynchronous async.js

async.map(map, function(item, mnext){
    async.waterfall([
        function(wnext){
            console.log("1"); 
            //mongodb queryies something like
            db.collection.find().toArray(function(err){
                if(err){
                    wnext(err);
                }else{
                    wnext();
                }

            })
        },
        function(wnext){
            console.log("2"); 
            //mongodb queryies something like
            db.collection.find().toArray(function(err){
                if(err){
                    wnext(err);
                }else{
                    wnext();
                }

            })
        },
        function(wnext){
            console.log("3"); 
            //mongodb queryies something like
            db.collection.find().toArray(function(err){
                if(err){
                    wnext(err);
                }else{
                    wnext();
                }

            })
        }   



    ], function(err){
        if(err){
            mnext(err);
        }else{
            mnext();
        }

    })
})

我希望根据地图的数量看到1 2 3 1 2 3 1 2 3。但情况并不像我预期的那样。我意识到它打印为1 2 1 2 3 3或除1 2 3之外的其他内容。我无法理解这是怎么发生的。因为它的瀑布和结构是真的我猜?那么我们可以说地图或瀑布存在问题吗?或者async.map是异步的,所以它会覆盖瀑布?

我不知道......而且我被困了。我错过了什么? Isn&#t; t 1 2 3是预期的序列吗?

1 个答案:

答案 0 :(得分:1)

如果您看到async.map doc https://caolan.github.io/async/docs.html#map

  

注意,因为此函数将iteratee应用于每个项目   并行,不能保证iteratee函数会   按顺序完成

是。 async.map是平行的。要实现您的目标,请使用async.mapSeries https://caolan.github.io/async/docs.html#mapSeries