在继续之前不等待查询

时间:2020-05-09 04:44:42

标签: javascript mysql node.js

我遇到了一个问题,即我的代码在继续执行之前没有等待查询完成,因此导致:

>> Quote Doesnt Exists
>> Checked Amount of quotes in database
>> undefined

这种情况在不到一秒钟的时间内发生,然后跟着定义了变量$ {number},有没有办法让我的程序在继续进行之前等待数字被定义?

    // check if quote exists
    await con.query(`SELECT * FROM quotes WHERE quote = '${args.join(" ")}'`, (err, rows) => {
        if (err) console.log(err);
        if (rows[0] == undefined) {
            turnback = false;
            return;
        } else if (rows[0].quote) {
            turnback = true;
            return client.say(channel, `That quote is already inside of the database!`)
        }
    })


    console.log("Quote Doesnt Exists")

    // return if it hasnt already (turnback)
    if (turnback == true) return;

    // creating variable "number" to be defined later
    var number;

    // check amount of quotes in database
    await con.query(`SELECT COUNT(*) AS cnt FROM quotes`, (err, rows) => {
        if (err) console.log(err);

        if (rows[0].cnt) {
            // defining variable
            number = (rows[0].cnt + 1)
        } else {
            number = 1
        }
    })

    console.log("Checked Amount of quotes in database")
    console.log(number)

    // creating variable "succsess" to be defined later
    var success;

    // insert quote into database
    await con.query(`INSERT INTO quotes (quote, id) VALUES ("${args.join(" ")}", "${number}");`, (err) => {
        if (err) {
            console.log(err)
            success = false
        } else {
            success = true
        }
    })

    // sending conformation to user
    if (success == true) {
        client.say(channel, `Successfully inserted quote #${number} into database`)
    } else if (success == false) {
        client.say(channel, `Something went wrong, I failed to Insert The quote into the database!`)
    }

1 个答案:

答案 0 :(得分:1)

问题是您试图使回调方法无法与await一起使用,因为await仅在结果或await之后的语句为promise。 这应该可以解决您的问题。

var success;
try {
  // check if quote exists
  await new Promise((resolve, reject) => {
    con.query(
      `SELECT * FROM quotes WHERE quote = '${args.join(" ")}'`,
      (err, rows) => {
        if (err) reject(err);
        if (rows[0] == undefined) {
          turnback = false;
          resolve();
        } else if (rows[0].quote) {
          turnback = true;
          client.say(channel, `That quote is already inside of the database!`);
          resolve();
        }
      }
    );
  });
  console.log("Quote Doesnt Exists");

  // return if it hasnt already (turnback)
  if (turnback == true) return;

  // creating variable "number" to be defined later
  var number;

  // check amount of quotes in database
  await new Promise((resolve, reject) => {
    con.query(`SELECT COUNT(*) AS cnt FROM quotes`, (err, rows) => {
      if (err) reject(err);

      if (rows[0].cnt) {
        // defining variable
        number = rows[0].cnt + 1;
        resolve();
      } else {
        number = 1;
        resolve();
      }
    });
  });
  console.log("Checked Amount of quotes in database");
  console.log(number);

  // creating variable "succsess" to be defined later

  // insert quote into database
  await new Promise((resolve, reject) => {
    con.query(
      `INSERT INTO quotes (quote, id) VALUES ("${args.join(
        " "
      )}", "${number}");`,
      (err) => {
        if (err) {
          console.log(err);
          success = false;
          resolve();
        } else {
          success = true;
          resolve();
        }
      }
    );
  });
} catch (error) {
  success = false;
}

// sending conformation to user
if (success == true) {
  client.say(channel, `Successfully inserted quote #${number} into database`);
} else if (success == false) {
  client.say(
    channel,
    `Something went wrong, I failed to Insert The quote into the database!`
  );
}