节点 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);
});
});
我有一个 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);
});
});