【问题标题】:ASYNC / AWAIT SQL Insert异步/等待 SQL 插入
【发布时间】:2021-08-12 22:16:37
【问题描述】:

我在 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, type, idbytype, posX, posY, posZ, rotX, rotY, rotZ, dimension, primaryColor, dirtLevel, engineHealth, lockstate, modkit, plate, secondaryColor];
       
       return (async () => {
           return await asynqQuery(query, args);
       })();


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

【问题讨论】:

    标签: node.js mysql2


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 2018-09-30
      • 1970-01-01
      • 2023-03-12
      • 2016-07-07
      • 2016-03-25
      • 2017-10-09
      相关资源
      最近更新 更多