this question的续集,我需要在POST请求中接受多个对象,然后为每个对象处理它,保存它,然后将保存的对象返回到前端(以便客户端可以查看哪些列已成功编辑。)
当我使用.map时,它会保存到数据库中,我可以确认这一点。但是,我有两个问题:
res.locals.retval.addData(dtoObject);
,而且我返回的有效负载内部没有数据传输对象。我的对象验证无法在map
的回调中完成。我最初尝试reduce
,但这根本不起作用,只是将所有相同的值保存到每个数据库对象。在映射时如何排除无效的JSON对象?
var jsonObjects = req.body;
//for (var n in req.body) {
var promises = jsonObjects.map((jsonObject) => {
var transform = new Transform();
// VALIDATION OF jsonObject VARIABLE IS HERE
if (jsonObject.id == 0) {
var databaseObject = Database.getInstance().getModel(objectName).build(jsonObject);
transform.setNew(true);
transform.setJsonObject(jsonObject);
transform.setDatabaseObject(databaseObject);
transform.baseExtract()
.then(() => transform.extract())
.then(() => transform.clean())
.then(() => transform.getDatabaseObject().save())
.then(function(data) {
// PROCESSING DATA
}).catch((e) => {
// ERROR
});
} else {
var queryParameters = {
where: {id: jsonObject.id}
};
console.log("Query parameters: ");
console.log(queryParameters);
Database.getInstance().getModel(objectName).findOne(queryParameters).then((databaseObject) => {
transform.setJsonObject(jsonObject);
transform.setDatabaseObject(databaseObject);
})
.then(() => transform.baseExtract())
.then(() => transform.extract())
.then(() => transform.clean())
.then(() => transform.getDatabaseObject().save())
.then((data) => {
// PROCESSING DATA
}).catch((e) => {
// ERROR
});
}
});
Promise.all(promises)
.then((results) => {
return next();
}).catch((e) => {
throw e;
});
这是产生的有效载荷:
{
"errors": [],
"warnings": [],
"data": []
}
答案 0 :(得分:2)
return Database.getInstance()
和return transform.baseExtract()
添加到您的代码中以解决此问题。使用Array.prototype.filter()删除要忽略的元素,因为您不需要对它们执行Promise,然后在生成的数组上调用Array.prototype.map()。如果您不想使用箭头功能,可以将其指定为filter
和map
的参数:
jsonObjects.filter(function(jsonObject){
},这个);
var promises = jsonObjects.map(function(jsonObject){
},这个);