#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) => {
}