Допустимое разрешение вызывает перехват с неправильным выводом

#typescript #promise

#машинописный текст #обещаю

Вопрос:

Я использую es5, commonjs, использую strict и установил для noImplicitAny значение false. У меня возникла проблема, когда при вызове функции grabUser() для получения информации от пользователя в базе данных. Он возвращает мне сообщение catch((err: any) => {}) where err , которое, как ожидается, будет содержать какое-то сообщение об ошибке. Однако err включает в себя все те правильные данные , которые должны были быть переданы в качестве результата then((result: any) => {}) .

Результат, который я получаю content err , указывает на то, что он был передан в catch со всеми результирующими данными из базы данных, которую я хочу использовать.

Мой вопрос заключается в том, почему скрипт разрешает запрос, но все равно перехватывает, поскольку это было бы ошибкой. Но содержит информацию из базы данных, которую я собираюсь использовать, как если бы она была продолжена then() ?

 class Database {

  connection: any;
  options: any = {
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    user: process.env.DB_USER,
    password: process.env.DB_PWD,
    database: process.env.DB_NAME
  };

  constructor() {
    this.connection = mysql.createConnection(this.options);
  }

  query(sql: string, args: any) {
    return new Promise((reject, resolve) => {
      this.connection.query(sql, args, (err, rows) => {
        if (err) {
          console.log("Query Error")
          return reject(err);
        }
        else {
          console.log("Query Succsess")
          resolve(rows);
        }
      });
    });
  }

  close() {
    return new Promise((reject, resolve) => {
      this.connection.end((err) => {
        if (err)
            return reject(err);
        else
            resolve();
      });
    });
  }

}

export async function grabUser(item: string, discord: any)
{
    var Con = new Database();

    // checks if there is a user with the uID in the Database with discord.id
    return Con.query(`select ${item} from users where uID = ?`, [discord.id])
        .then((result: any) => {
          Con.close();
          console.log("content result")
          console.log(result)
          console.log("length")
          console.log(result.length)
          console.log("type")
          console.log(typeof result)
          // If there is something that it returned and that its larger than 0
          if (result amp;amp; result.length > 0)
            return result[0];
          else
            return false;
        })
        .catch((err: any) => {
          console.log("content err")
          console.log(err)
          console.log("length")
          console.log(err.length)
          console.log("type")
          console.log(typeof err)
          // log(err);
          return false;
        });
}
 

Комментарии:

1. разрешение — это первый параметр. Вы называете это отклонением и наоборот

Ответ №1:

Вы перепутали resolve и reject параметры. Это должно быть так:

 new Promise((resolve, reject) => {
}