我如何承诺节点-adodb



我正在尝试使用bluebirdjs来承诺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()方法。

我如何node-adodb与承诺一起工作..?

我不

熟悉node-adodb,但从其文档中可以看出,它似乎使用了一种非常规的方式来返回错误和结果(使用类似事件的发射器(。

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

但你可以自己包装它:

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

最新更新