在创建属性之前,节点JS循环数组

时间:2015-03-15 15:04:51

标签: javascript arrays node.js asynchronous

我有一个JSON输入,其中包含将其链接到辅助模型(用户)的数据。我需要遍历listingData.Agents以获取索引ID,然后查找此索引ID以获取用户。我将此推送到数组的用户ID,但由于异步,当运行create属性函数时,数组为空。如何操作并从阵列中获取数据,然后在所有数据到位后运行创建。

感谢。

exports.createProperty = function(req,res,next) {
var listingData = req.body;

listingData.User = [];

_.forEach( listingData.Agents , function(n, key) {
    User.findOne({ agentId : n.AgentId},function(err,user) {
        listingData.User.push(user._id);
    });
});

Property.create(listingData, function(err,property) {
    if (err) {
        res.status(400);
        return res.send({reason:err.toString()});
    }
    res.send(req.property);
})}

1 个答案:

答案 0 :(得分:1)

如果您不介意在代码中引入新库,node-async可以解决您的问题。

使用node-async,您的代码为:

var async = require('node-async')
exports.createProperty = function(req,res,next) {
var listingData = req.body;

listingData.User = [];

async.each(listingData.User,
           function(n, key) {
               User.findOne({ agentId : n.AgentId},function(err,user) {
                   listingData.User.push(user._id);
               });
           },
           function (asyncErr){
               //handle asyncErr first
               Property.create(listingData, function(err,property) {
                   if (err) {
                       res.status(400);
                       return res.send({reason:err.toString()});
                   }
                   res.send(req.property);
               });
           });