我如何宣传node-adodb?

时间:2017-05-24 08:28:19

标签: javascript promise bluebird

我尝试使用bluebirdjs宣传<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-countdown/2.0.2/jquery.plugin.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-countdown/2.0.2/jquery.countdown.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery-countdown/2.0.2/jquery.countdown.min.css" /> <div id='countdown'></div>

我试过这个:

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()使用promises ..?

1 个答案:

答案 0 :(得分:1)

我不熟悉node-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)
})