2017-05-25 1030 views
3

此错误似乎在每个http请求中都会出现。我不完全确定它来自哪里?UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:22):ReferenceError:客户端未定义

(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(); 
} 

它首先我认为这必须从我终于现身块(也许client是超出范围),但我说,如果声明明确阻止试图调用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; 
+0

是否有异常没有行号? – Bergi

+0

该代码看起来不错。这是确切的,整个代码?你是否在其他地方使用过“客户端”(grep)? – Bergi

+0

@Bergi更正,没有行号。我更新了完整的路线(我简化了查询,因为它不是焦点)。来自这里的任何线索? –

回答

1

所有信用这里去briancnode-postgres谁我收到的建议之后,这可能是与该库的问题在这里回答我的问题的创造者(似乎不是这样)。我只是需要创建try-catch

var client = await pool.connect() 
try { 
    await client.query(...) 
    res.sendStatus(200) 
} catch { ...} 
finally { 

} 

他完整的答案以外的客户可以在这里找到:https://github.com/brianc/node-postgres/issues/1301

相关问题