#javascript #sql-server #api #rest #express
Вопрос:
Функция входа в систему использует функцию ExecuteSQL, которая используется для проверки наличия пользователя? При запуске этого файла я получаю следующую ошибку. асинхронное ожидание.
Ошибка ссылки: Не удается получить доступ к «результату» до инициализации в /Пользователи/naseefali/Документы/Проекты/common_express_api/данные/DL.js:100:25 при асинхронном входе в систему (/Пользователи/naseefali/Документы/Проекты/common_express_api/данные/DL.js:99:24) ВЫБЕРИТЕ fUserPwd ИЗ tblUser, ГДЕ fUserID = «АДМИНИСТРАТОР» {наборы записей: [ [ [Объект]]], набор записей: [ { fUserPwd: ‘006060061500675006630067300667’}], вывод: {}, Измененные строки: [ 1 ] }
Код
async function testConnection() {
try {
const pool = await getConnection();
if (pool) {
const result = await pool.request()
.query('SELECT * FROM tblUser', function (err, sqlResult) {
if (err) {
console.log(err);
}
else {
console.log(sqlResult);
}
});
}
else console.log(pool);
} catch (err) {
console.log(err);
}
};
async function ExecuteSQL(strSQL) {
try {
const pool = await getConnection();
if (pool) {
const result = await pool.request()
.query(strSQL, async function (err, sqlResult) {
if (err) {
console.log(err);
}
else {
console.log(strSQL);
console.log(sqlResult);
return sqlResu<
}
});
}
else console.log(pool);
} catch (err) {
console.log(err);
}
};
async function login(strUID) {
const strSQL = `SELECT fUserPwd FROM tblUser WHERE fUserID ='${strUID}'`;
try {
const result = await ExecuteSQL(strSQL).then(await function () {
console.log(result);
});
} catch (err) {
console.log(err);
}
};
login('ADMIN');
Ответ №1:
потому что тогда вы не вернули значение и не получили доступ к результату перед его назначением
async function login(strUID) {
const strSQL = `SELECT fUserPwd FROM tblUser WHERE fUserID ='${strUID}'`;
try {
const result = await ExecuteSQL(strSQL).then(await function () {
console.log(result);
});
} catch (err) {
console.log(err);
}
};
попробуйте изменить его на
const result = await ExecuteSQL(strSQL).then(function (data) {
return data
});
console.log(result);
или просто
const result = await ExecuteSQL(strSQL);
console.log(result);
Комментарии:
1. с помощью : const результат = ожидание ExecuteSQL(strSQL); console.log(результат); он все еще не определен..
2. с : const результат = ожидание ExecuteSQL(strSQL).затем(функция (данные) { возвращаемые данные }); console.log(результат); все еще не определено
3. извините, я не указал, что в функции ExecuteSQL что-то не так, внутри этой функции вам нужно вернуть результат, вы можете взглянуть на ответ Назифа Али
Ответ №2:
здесь я просто возвращаю что-либо из ExecuteSQL.
Я сделал
async function ExecuteSQL(strSQL) {
try {
const pool = await getConnection();
//you don't need to check for the pool, because getConnection() will throw if there is an error
const result = await pool.request().query(strSQL);
return resu<
} catch (err) {
console.log(err);
}
};
async function login(strUID) {
const strSQL = `SELECT fUserPwd FROM tblUser WHERE fUserID ='${strUID}'`;
try {
const result = await ExecuteSQL(strSQL);
console.log(result);
return resu<
} catch (err) {
console.log(err);
}
};