Mysql
 sql >> Base de données >  >> RDS >> Mysql

Je ne peux pas retourner un objet dans .then() Promise

En supposant que vous utilisez ceci node mysql package, vous pouvez obtenir l'identifiant inséré à partir du résultat de l'instruction d'insertion.

Étant donné que ce paquet ne semble pas être au courant de l'existence de promesses, vous pouvez dépoussiérer l'API avec un wrapper qui renverra une promesse :

//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)
)