【发布时间】:2017-10-25 12:56:47
【问题描述】:
我提出的每个http 请求似乎都会出现此错误。我不完全确定它来自哪里?
(node:39390) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 22): ReferenceError: client is not defined
错误中没有行号,但这里有一个似乎导致它的代码示例:
try {
var client = await pool.connect();
await client.query(queryStatement, queryArgumentsArray);
res.sendStatus(200);
} catch (e) {
console.log('Error adding updating subvendor availability data, UPDATE SQL query task', err);
res.sendStatus(500);
} finally {
client && client.release && client.release();
}
首先我认为它一定来自我的 finally 块(可能 client 超出范围),但我添加了 if 语句以明确防止尝试调用 client.release(如果它不存在):
if (client) { client && client.release && client.release() };
我仍然收到此错误,所以我觉得它一定来自这些行。
var client = await pool.connect();
await client.query(queryStatement, queryArgumentsArray);
res.sendStatus(200);
我是否误解了如何使用异步?需要明确的是,代码运行良好,http 请求正在运行(正确响应请求),我的终端刚刚被这些警告淹没。
这是完整路线的简化版本:
var express = require('express');
var router = express.Router();
var pool = require('../modules/pg-pool'); // brings in pg-pool created in another module
// This route updates the availability for a user
router.put('/updateAvailability', async (req, res) => {
var userId = req.decodedToken.userSQLId;
var subvendorId = req.headers.subvendor_id;
var availability = req.body;
var queryStatement = 'UPDATE status SET status=$3 WHERE userId=$2';
var queryArgumentsArray = [availability.status, userId ];
try {
var client = await pool.connect();
await client.query(queryStatement, queryArgumentsArray);
res.sendStatus(200);
} catch (e) {
console.log('Error updating subvendor availability data, UPDATE SQL query task', err);
res.sendStatus(500);
} finally {
client && client.release && client.release();
}
});
module.exports = router;
【问题讨论】:
-
异常中没有行号吗?
-
该代码看起来不错。这是确切的完整代码吗?您是否在其他任何地方使用术语
client(grep 表示)? -
@Bergi 正确,没有行号。我更新了完整的路线(我稍微简化了查询,因为它不是重点)。这里有什么线索吗?
-
@LukeSchlangen 尝试使用pg-promise。如果您不再看到问题,则问题出在
node-postgres驱动程序内部。 -
这真的很奇怪。您如何使用 ES8
async/await,使用转译器或原生转译器?如果是前者,也许我们应该看看转译输出。
标签: javascript node.js async-await try-catch