【问题标题】:Node/Bluebird/MySQL transactions节点/Bluebird/MySQL 事务
【发布时间】:2016-10-30 07:40:33
【问题描述】:

过去一周,我一直在为 Bluebird Promise 库和 MySQL 苦苦挣扎。我不断发现 doco 假设我完全沉浸在他们的术语中,并且通常只给出示例中的一半答案,或者根本没有给出答案。让我悬而未决,试图弄清楚如何使用它。

目前我正在尝试执行一系列 SQL 命令来在事务中创建数据库记录。我正在使用此代码:

var Promise = require('bluebird');
var mysql = require('mysql');
Promise.promisifyAll(mysql);
Promise.promisifyAll(require('mysql/lib/Connection').prototype);
Promise.promisifyAll(require('mysql/lib/Pool').prototype);

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

function getTransaction(connection) {
    return connection.beginTransactionAsync().disposer(function (tx, promise) {
        if (promise.isFulfilled()) {
            tx.commitAsync();
        } else {
            tx.rollbackAsync();
        }
    });
}

Database.prototype.addStory = function (projectId, title, text) {
    return Promise.using(getConnection(), function (connection) {
        return Promise.using(getTransaction(connection), function () {
            return connection.queryAsync('INSERT INTO story SELECT ?, MAX(storyNumber) + 1, ?, ?, 0 FROM story WHERE projectID = ?',
                [projectId, title, text, projectId])
                .then(connection.queryAsync('select LAST_INSERT_ID()'))
                .then(function (rows) {
                    debug("Returning story for %s", rows[0]);
                    return getStory(connection, rows[0]);
            });
        });
    });
}

目前我收到此错误:

TypeError: tx.rollbackAsync is not a function

从我阅读的内容来看,我的代码应该可以工作。有谁知道它有什么问题吗?

【问题讨论】:

  • pool 定义在哪里?

标签: mysql node.js promise bluebird


【解决方案1】:

感谢大家的回答。

我现在找到了Knex API,它可以用更少的代码解决我的所有问题。

【讨论】:

    【解决方案2】:

    我发现了最初的错误并在我的代码中使用了这种方法:

    function getTransaction(connection) {
        return connection.beginTransactionAsync().disposer(function (tx, promise) {
            if (promise.isFulfilled()) {
                connection.commitAsync();
            } else {
                connection.rollbackAsync();
            }
        });
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2014-06-23
    相关资源
    最近更新 更多