在pg-promise中查询超时

我想为pg-promise查询添加超时,所以如果数据库还没有响应,它们会在一段时间后失败。 有没有build议的方式来做到这一点,或者我应该做自定义包装将处理计时器和拒绝承诺如果为时已晚?

来自pg-promise的作者…


pg-promise不支持查询取消,因为这是一个破解不正确的数据库devise或错误的查询执行的窍门。

PostgreSQL支持执行耗时的查询时应该使用的事件,因此可以设置一个事件监听器,以便在特定的数据/视图可用时触发。 请参阅LISTEN / NOTIFY示例。

你可以用你自己的自定义查询方法来扩展pg-promise ,这个方法会用一个拒绝来超时(见下面的例子),但这又是另一个解决devise问题的方法。

使用蓝鸟的例子:

const Promise = require('bluebird'); Promise.config({ cancellation: true }); const initOptions = { promiseLib: Promise, extend: obj => { obj.queryTimeout = (query, values, delay) => { return obj.any(query, values).timeout(delay); } } }; const pgp = require('pg-promise')(initOptions); const db = pgp(/* connection details */); 

然后你可以在每个级别上使用db.queryTimeout(query, values, delay)

或者,如果您使用的是蓝鸟 ,则可以将.timeout(delay)到任何现有的方法:

 db.any(query, values) .timeout(500) .then(data => {}) .catch(error => {}) 

也可以看看:

  • 扩展事件
  • Bluebird.timeout