sql >> Base de Datos >  >> RDS >> Mysql

No puedo devolver un objeto en .then() Promesa

Suponiendo que usa esto node mysql package puede obtener la identificación insertada de resultado de la declaración de inserción.

Dado que ese paquete no parece ser consciente de la existencia de promesas, puede desempolvar la API con un contenedor que devolverá una promesa:

//turn an insert query with callback function 
//  into a function returning a promise
const insertAsPromise = connection => args => 
  new Promise(
    (resolve,reject)=>
      //call connection query with variable amount of argument(s)
      //  using Function.prototype.apply
      connection.query.apply(connection,args.concat(
        //add the callback to the list of arguments, callback
        //  is the last argument
        (error, results, fields) =>
          (error)
            ? reject(error)
            : resolve([results,fields])
      ))
  );


const sqlEdit = "INSERT INTO images_det SET ?";
Promise.all(
  object.det_img.map(
    image=>//map magical/global object.det_img to promise
      insertAsPromise(connection)([sqlEdit,image.name_img])
      .then(//when promise resolves get the inserted id
        ([results,fields])=>
          results.insertId
      )
  )
)
.then(
  results=>console.log(results)//should log an array of id's
)
.catch(
  err=>console.error("something went wrong:",err)
)