Node / MySQL2 / bluebird承诺不起作用

时间:2016-06-29 04:34:53

标签: node.js bluebird mysql2

我有以下代码:

var Promise = require('bluebird');
var mysql = require('mysql2/promise');

var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'root',
database: 'crux'
});

Database.prototype.listProjects = function () {
    return getConnection()
        .then(function (connection) {
            return connection.query('SELECT * FROM project');
        })
};

function getConnection() {
    return pool.getConnection().disposer(function (connection, promise) {
        connection.release();
    });
}

但是当我运行这个时,我收到了这个错误:

TypeError: pool.getConnection(...).disposer is not a function
    at getConnection (...
    at Database.listProjects(...
    .... 

我一直在尝试关注MySQL2 github网站上的示例代码。但我不明白为什么这不起作用。就我所知,pool.getConnection()似乎正在回复一个承诺。

任何人都完成了这样的代码?

2 个答案:

答案 0 :(得分:2)

谢谢大家。我现在切换到Knex API,它解决了我遇到的所有问题。

答案 1 :(得分:2)

如果您更喜欢bluebird版本的promises,可以将它作为参数传递给mysql2:

var Promise = require('bluebird');
var mysql = require('mysql2/promise');

var pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'crux',
  Promise: Promise
});

请参阅https://github.com/sidorares/node-mysql2/blob/c487f542f7f4416f9759319225197c383b4937fb/promise.js#L5

默认情况下使用全局Promise,但只是执行var Promise = require('bluebird');并不会使其成为全局。