Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数中嵌套的async.map_Javascript_Node.js_Mongodb_Asynchronous_Express - Fatal编程技术网

javascript函数中嵌套的async.map

javascript函数中嵌套的async.map,javascript,node.js,mongodb,asynchronous,express,Javascript,Node.js,Mongodb,Asynchronous,Express,我在使用图书馆时面临一个问题。我有一种情况,我使用asyc.auto和一个使用async.map的函数。现在在回调中我得到一个结果数组,在下一个函数中,我需要调用db update/insert query。我可以在另一个async.map中使用async.map吗 为了让事情更清楚,请看以下内容: async.auto({ // other functions D: ['A', function(callback, results){ var resultIds

我在使用图书馆时面临一个问题。我有一种情况,我使用asyc.auto和一个使用async.map的函数。现在在回调中我得到一个结果数组,在下一个函数中,我需要调用db update/insert query。我可以在另一个async.map中使用async.map吗

为了让事情更清楚,请看以下内容:

async.auto({
    // other functions
    D: ['A', function(callback, results){
        var resultIds = results.A;
        async.map(resultIds, function(data, cb){
            // do some stuff
        }, function(err, result){
            console.log(err);
            if(err) {
                callback(err);
            }
            callback(null, result);
        }); 
    }],
    E: ['D', function(callback, results){
        var resultIds = results.D; // an array of result which contains ids: [1,2,4]
        async.map(resultIds, function(data, cb){
            // Can I use again a async.map here like this
            async.map(data[ids], function(d,cb){
                // do some stuff here
            }, function(err, result){});
        }, function(err, result){
            console.log(err);
            if(err) {
                callback(err);
            }
            callback(null, result);
        }); 
    }]
}, function(err, results){
    console.log(results);
    if(err) {
        cb(err);
    }
    cb(null, results);
});

有没有更好的方法来处理这种情况?我正在使用这些ID更新/插入新文档。

为什么不在后端创建所有文档?从前端进行一次呼叫,在后端获取id并更新/插入数据只要正确调用回调,就可以嵌套任意多个级别。在
E
中的两个
async.map
回调中,你在做什么?@biancamihai:这只是整个后端的东西…@dark\u shadow,您不必为每个async.map使用不同的参数,也不必对它们进行不同的命名。如果调用cb,外部和内部回调的命名方式(cb)都会起作用,因为JS作用域将确定它是哪一个。我的意思是当您在其中时调用async.map()回调。我见过调用外部回调(如E的回调)而不是async.map()的回调的代码。我个人的偏好是,我给它们取不同的名字只是为了帮助我和其他人阅读我的代码。我将外部映射命名为mapCb,下一级的async.map()命名为mapCb1。