首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node/Bluebird/MySQL事务

Node/Bluebird/MySQL事务
EN

Stack Overflow用户
提问于 2016-06-28 14:17:42
回答 2查看 953关注 0票数 2

在过去的一周里,我一直在努力使用Bluebird promise库和MySQL。我不断发现,doco假设我完全沉浸在他们的术语中,通常在它的例子中只给出了一半的答案,或者根本没有。让我绞尽脑汁想知道怎么用它。

目前,我正在尝试执行一系列SQL命令,以便在事务中创建数据库记录。我使用的是以下代码:

代码语言:javascript
复制
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]);
            });
        });
    });
}

目前我得到了这个错误:

代码语言:javascript
复制
TypeError: tx.rollbackAsync is not a function

根据我所读到的,我的代码应该可以工作。有人知道它出了什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2016-06-29 18:56:03

谢谢你们的回答伙计们。

我现在已经找到了Knex应用程序接口,它用更少的代码解决了我所有的问题。

票数 1
EN

Stack Overflow用户

发布于 2018-12-04 03:34:50

我已经找到了最初的错误,并在代码中使用了这种方法:

代码语言:javascript
复制
function getTransaction(connection) {
    return connection.beginTransactionAsync().disposer(function (tx, promise) {
        if (promise.isFulfilled()) {
            connection.commitAsync();
        } else {
            connection.rollbackAsync();
        }
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38068397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档