2014-12-11 95 views
0

我有一个模型阵列,我有类型和关键。异步NodeJS

models = [{type: 'user', key: getKey('user')},  
    //. 
    //.Many more model objects here 
    //. 
    {type: 'employee', key: getKey('employee')}]; 

在这里,我的每个模型映射到我的搜索功能,它得到的数据为每个模型:

async.map(models, search, function (err, results) { 
    if (err) { 
     res.json(400, err); 
    } else { 
     // Here results is an array of arrays of different results for different models and I dont know how to check 
     // how to find different models with the same key and union their results if they have the same key value... 
     var mergedResult = []; 
     mergedResult = mergedResult.concat.apply(mergedResult, results); 
     res.json(200, mergedResult); 
    } 
}); 

,这里是我的搜索功能,它返回传递型号名称:

function search(model, callback) { 
    getData(model.type, callback); 
} 

所以,现在我得到每个模型(用户,客户,...和员工)的结果,但现在我想检查这些模型是否有相同的关键字,我通过getKey(modelName)功能;在我们的例子中可以说用户和员工的关键是相同的,它是“名称”字段,所以在这种情况下我想结合(如sql中的联合)员工和用户的结果: 可以说“用户“我们得到:

结果用户模型:

[ 
    { 
     name : "Mike", 
     age: 33 
     eyeColor: "brown" 
    }, 
    { 
     name : "David", 
     age: 35 
    } 
] 

,并为员工,我们得到:

结果员工型号:

[ 
     { 
      name : "Mike", 
      age: 33, 
      heigh: 178, 
      eyeColor: "black" 
     }, 
     { 
      name : "Nanacy", 
      age: 39 
     } 
    ]  

期望的结果:

[ 
    { 
     name : "Mike", 
     age: 33 
     eyeColor: "brown", 
     heigh: 178 
    }, 
    { 
     name : "David", 
     age: 35 
    }, 
    { 
     name : "Nanacy", 
     age: 39 
    } 
] 

在我的算法,我只是简单地返回:

我就要回:

[ 
    { 
     name : "Mike", 
     age: 33 
     eyeColor: "brown" 
    }, 
    { 
     name : "David", 
     age: 35 
    }, 
    { 
     name : "Mike", 
     age: 33, 
     heigh: 178, 
     eyeColor: "black" 
    }, 
    { 
     name : "Nanacy", 
     age: 39 
    } 
]  

请让我知道如果我你需要更多的驯服! 感谢

+1

确实有'async'任何实际问题?如果功能是同步的,你能解决这个问题吗?如果是这样,请告诉我们(伪)代码,它可能比您的文本更容易理解。 – Bergi 2014-12-11 04:10:22

+0

映射通过'Object.keys' /'[]。keys()'代替 – 2014-12-11 04:45:15

+0

@Bergi谢谢你!我想我简化了我的问题;我希望这更有意义;我只是在寻找与mysql联盟相同的功能;我的搜索功能是回报每个模型的结果... – user385729 2014-12-11 04:58:32

回答

1

您应该保存key有关的信息,而你有它:

function search(model, next) { 
    var data = getData(model.type, function(err, data){ 
    if (err) return next(err); 
    data['__key'] = data[model.key]; 
    next(null, data) 
    }); 
}