Javascript 我如何承诺节点adodb?

Javascript 我如何承诺节点adodb?,javascript,promise,bluebird,Javascript,Promise,Bluebird,我正在尝试使用promisifynode adodb 我试过这个: import Promise from 'bluebird' import ADODB from 'node-adodb' const db = ADODB.open(`...`) const dbQuery = db.query(`...`) const dbQueryOn = Promise.promisify(dbQuery.on, { context: dbQuery }) dbQueryOn('done').the

我正在尝试使用promisify
node adodb

我试过这个:

import Promise from 'bluebird'
import ADODB from 'node-adodb'

const db = ADODB.open(`...`)
const dbQuery = db.query(`...`)
const dbQueryOn = Promise.promisify(dbQuery.on, { context: dbQuery })

dbQueryOn('done').then(data => {
  console.log('data =', data)
}).catch(err => {
  console.log('err =', err)
})
返回数据,但它是通过
.catch()
而不是
.then()
方法来的


如何让
节点adodb
与promises一起工作?

我不熟悉
节点adodb
,但从其文档来看,它似乎使用了一种非常规的方式返回错误和结果(使用类似事件的发射器)

Bluebird的
promisify
需要常规Node.js回调约定(第一个参数表示错误,第二个参数表示“结果”值),因此在这种情况下不能使用它

但你可以自己包装:

const db = ADODB.open(`...`);

const runQuery = query => {
  return new Promise((resolve, reject) => {
    db.query(query)
      .on('done', resolve)
      .on('fail', reject);
  });
}

// Usage:
runQuery(`...`).then(data => {
  console.log('data =', data)
}).catch(err => {
  console.log('err =', err)
})

听起来它们的回调参数的顺序是相反的?