¿Cómo puedo omitir una callback al ejecutar .map en JavaScript / Node.js?

Como una continuación de esta pregunta , necesito aceptar múltiples objetos en una solicitud POST y luego, para cada objeto procesarla, guardarla y luego devolver el objeto guardado a la interfaz (para que el cliente pueda ver qué columnas se editaron correctamente) ).

Cuando uso .map, se guarda en la base de datos y puedo confirmarlo. Sin embargo, tengo dos problemas:

  1. No ejecuta res.locals.retval.addData(dtoObject); correctamente, y mi carga útil de retorno no tiene objetos de transferencia de datos dentro de ella.
  2. Mi validación de objetos no se puede hacer dentro de la callback del map . Inicialmente intenté reduce , pero eso no funcionó en absoluto y simplemente guardé los mismos valores en cada objeto de la base de datos. ¿Cómo puedo excluir objetos JSON no válidos mientras los estoy mapeando?

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

Aquí está la carga útil resultante:

 { "errors": [], "warnings": [], "data": [] } 

  1. Como @KevinB dijo en los comentarios, le faltan las llamadas de retorno dentro de sus funciones de flecha, por lo que los guardados de la base de datos se están realizando porque son parte de la cadena de Promesa, pero los impulsos a la respuesta se detienen esperando la devolución, y luego La llamada Express.js se resuelve antes de que lo hagan las Promesas. Agregue return Database.getInstance() y return transform.baseExtract() a su código para solucionar este problema.
  2. Use Array.prototype.filter () para eliminar los elementos que desea ignorar, ya que nunca necesitará ejecutar Promesas en ellos, luego llame a Array.prototype.map () en la matriz resultante. Si no desea utilizar las funciones de flecha, puede especificar esto como un parámetro para filter y map :

    jsonObjects.filter (function (jsonObject) {

    }, esta);

    var promises = jsonObjects.map (function (jsonObject) {

    }, esta);