在具有异步

时间:2017-03-15 15:58:51

标签: javascript node.js asynchronous

我有userCurrentContainer = [[],[{"1":"xyz"},{"2":"abc"}],[{"1":"xyz"}],[]]

我希望按键分组,以便输出看起来像:{ 1: xyzxyz, 2: abc}

我正在使用异步库。 我理解分组逻辑.. 但我的问题是当一切都完成然后我会回调.. 但是在打电话之前......

function grupbyContainerId(userCurrentContainer,callback){
            var track=0;
            var temp=new Array();
            async.eachSeries(userCurrentContainer, function (key,callback1) {
                track=track+1

                if(key.length>0){
                    var innertrack=0;
                    async.eachSeries(key, function (key1,callback2) {
                         innertrack=innertrack+1
                         //logic here 

                         if(track>=userCurrentContainer.length&&innertrack,key.length>=key.length){
                            console.log("if calledd ---------->");
                            callback(null,temp)
                         }

                        callback2();
                    })
                }

                callback1();

            });

        }

2 个答案:

答案 0 :(得分:1)

请接受http://caolan.github.io/async/docs.html#eachSeries 它应该有3个参数。尝试类似的东西:

function doSomeAction() {
var someNestedArray = [[],[{key:'value1'}],[],[{key:'value2'}]];
async.eachSeries(someNestedArray, function (item, next) {
    async.eachSeries(item, function (deepObj, cb) {
        console.log(deepObj)
        cb()
    }, function (err, result) {
        next();
    })

}, function (err, res) {
    console.log('AllWorkDone');
})}

答案 1 :(得分:0)

根据您提供的基本输入/输出示例来判断,我认为使用reduce可能更适合您。 E.g。

const input = [[],[{"1":"xyz"},{"2":"abc"}],[{"1":"xyz"}],[]];
const output = input.reduce(function (acc, value) {
  for (let val of value) {
    acc[Object.keys(val)] = val[Object.keys(val)] + (acc[Object.keys(val)] || '');
  }
  return acc;
}, {});
console.log(output);