node.js - NodeJS - 异步/等待不在 Express Route 中等待
问题描述
我试图通过使我的所有数据库调用同步来逃避我的快速应用程序中的回调地狱。然而,即使使用 async/await 和 promise,下面的函数也会返回“未定义”,因为 console.log 在前面的语句完成之前被命中。
app.post("/users", async (req, res) => {
...
const users = await GetUsersFromDatabase();
console.log(users);
...
});
下面列出的异步函数如下:
const DBUtil = require("./db-service");
...
async function GetUsersFromDatabase() {
var p = new Promise(function(resolve, reject) {
DBUtil.query(
"SELECT * FROM Users",
(err, data) => {
if (err) {
reject(error);
}
resolve(data.recordset);
});
});
}
db-service 如下所示:
const sql = require('mssql');
let connPoolPromise = null;
var dbConfig = require('./config/database_config.json');
const getConnPoolPromise = () => {
if (connPoolPromise) return connPoolPromise;
connPoolPromise = new Promise((resolve, reject) => {
const conn = new sql.ConnectionPool(dbConfig);
conn.on('close', () => {
connPoolPromise = null;
});
conn.connect().then(connPool => {
return resolve(connPool);
}).catch(err => {
connPoolPromise = null;
return reject(err);
});
});
return connPoolPromise;
}
// Fetch data example using callback
exports.query = (sqlQuery, callback) => {
getConnPoolPromise().then(connPool => {
}).then(result => {
callback(null, result);
}).catch(err => {
callback(err);
});
};
上面的 console.log 打印
不明确的
我确保 sql 数据正确返回。但是为什么我的异步方法不起作用?
解决方案
推荐阅读
- spring - 所有团队列表
- javascript - 无法在非常简单的事件侦听器中将变量传递给函数
- php - Wordpress - 如何根据元值与用户输入查询用户
- python - 如何使用 fcm_django 在 IO 上发送推送通知
- angular - 带有步骤的Angular2模态
- android - 是什么导致 android.support.v4.app.Fragment.setUserVisibleHint() 崩溃?
- php - 无法使用 Php 和 Curl 运行 Rest API
- redis - redis:使用joblib批量插入
- javascript - 三个js中一行中心点的文字
- arrays - 将数组加载到 sklearn.linear_model