我如何承诺 node-adodb?
How do I promisify node-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
使用 promises..?
我不熟悉 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)
})
我正在尝试使用 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
使用 promises..?
我不熟悉 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)
})