Не дожидаясь запроса перед продолжением - PullRequest
0 голосов
/ 09 мая 2020

У меня проблема, когда мой код не ожидает запроса на финиш sh перед продолжением, в результате чего:

>> 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 Ответ

1 голос
/ 09 мая 2020

Проблема в том, что вы пытаетесь сделать метод обратного вызова для работы с 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!`
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...