NodeJS中的异步

时间:2014-12-11 03:43:17

标签: javascript node.js asynchronous

我有一系列模型,我有类型和密钥。

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中的union)雇员和用户的结果: 让我们说“我们得到的用户”:

用户模型的结果:

[
    {
        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 个答案:

答案 0 :(得分: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)
  });
}