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

Node JS Loop Through Array Before Creating Property

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

谢谢。

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);
})}

如果您不介意在代码中引入新库,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);
               });
           });