异步/等待 SQL 插入

问题描述

我正在 altv.mp GTA V 平台上编码,但遇到了问题;

当我尝试插入一些值时,我得到未定义等。 (查询正确)

我在那里使用了 await 和 async 以及 promise,这次我得到了 Promise : Pending

如何获取insertID

   let promise = new Promise((resolve,reject) => {
       con.query(query,params,(err,result) => {
           if (err)
               return reject(err);
           resolve(result.insertId);
       });
   });


   let res = await promise;
   console.log(res);
   return res;
}

export function createveh(player,type,idbytype,model) {

   let posX = player.pos.x;
   let posY = player.pos.y + 5;
   let posZ = player.pos.z + 1;
   let rotX = player.rot.x;
   let rotY = player.rot.y;
   let rotZ = player.rot.z;
   let dimension = player.dimension;

   try {
       const newVehicle = new alt.Vehicle(model,posX,posY,posZ,rotX,rotY,rotZ);
       let dimension = newVehicle.dimension;
       let primaryColor = newVehicle.primaryColor;
       let dirtLevel = newVehicle.dirtLevel;
       let engineHealth = newVehicle.engineHealth;
       let lockstate = newVehicle.lockState;
       let modkit = newVehicle.modKit;
       newVehicle.numberPlateText = license();
       let plate = newVehicle.numberPlateText;
       let secondaryColor = newVehicle.secondaryColor;


       alt.emitClient(player,'vehicle:createveh',newVehicle);
       


       let sqlID;
       let query = "INSERT INTO vehicle SET model = ?,type = ?,owner = ?,posX = ?,posY = ?,posZ = ?,rotX = ?,rotY = ?,rotZ = ?,dimension = ?,primaryColor = ?,dirtLevel = ?,engineHealth = ?,lockState = ?,modKit = ?,plate = ?,secondaryColor = ?";
       let args = [model,rotZ,dimension,primaryColor,dirtLevel,engineHealth,lockstate,modkit,plate,secondaryColor];
       
       return (async () => {
           return await asynqQuery(query,args);
       })();


      
   } catch (err) {
       console.log(err);
   }
   //return insertId;
}```

解决方法

mysql2 模块有 inbuilt promise support。由于您的用例并不真正需要您自己的承诺实现,因此您需要做的就是:

export async function createveh(player,type,idbytype,model) {
   ...
   try {
       ...
       const [result] = await con.query(query,args);
       // extract id from result and return it
   } catch (err) {
       console.log(err);
   }
}