javascript - 何时使用 Knex transacting() 与链接 trx 对象

标签 javascript database postgresql transactions knex.js

Knex 的交易文档中的代码如下所示:

knex.transaction(function(trx) {
    var books = [
        {title: 'Canterbury Tales'},
        {title: 'Moby Dick'},
        {title: 'Hamlet'}
    ];

    return trx
    .insert({name: 'Old Books'}, 'id')
    .into('catalogues')
    .then(function(ids) {
    return Promise.map(books, function(book) {
        book.catalogue_id = ids[0];

        // Some validation could take place here.

        return trx.insert(info).into('books');
    });
    });
})

在 SO 上,我看到函数 transacting() 的广泛使用,示例如下:

knex.transaction(function(trx) {
   knex('foo')
  .transacting(trx)
  .insert({id:"bar", username:"bar"})
  // etc
 })

Knex 描述 transacting() 的例子与上面类似:

Used by knex.transaction, the transacting method may be chained to any query and passed the object you wish to join the query as part of the transaction for.

我的问题是:

trx.insert().into('foo')knex('foo').transacting(trx).insert() 有什么区别为什么要使用一个而不是另一个?

最佳答案

当你想在同一个事务中执行多个操作时,使用.transacting(trx)会很方便:

knex.transaction(function (trx) {
    return Promise.all([
        knex('foo').insert({ name: 'My Name' }).transacting(trx),
        knex('bar').insert({ field: 'Value' }).transacting(trx)
    ])
    // ---- or something like ----
    return Promise.all(SOME_INPUT_VALUES.map(function (value) {
        return knex('foo_bar').update('lul', value.lul).where('id', value.id).transacting(trx)
    }))
})

真的不知道其他方法的特定用法。这可能只是风格问题。你有两个接口(interface),你可以选择一个你最喜欢的。至于我,我习惯了.transacing(trx)

关于javascript - 何时使用 Knex transacting() 与链接 trx 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804950/

相关文章:

django - 内存数据库性能问题中的 PostgreSQL

javascript - 在客户端读取提要时出现 NotAllowedException

javascript - 通过使用现有元素创建新字段来修改 JSON 对象

php - 我的问题合适的数据库结构是什么?

sql - 取某列的平均值,然后过滤掉所有小于平均值的行,然后统计行数

asp.net - 如何使用asp.net将下拉列表中的空值添加到sql server

performance - Postgres 中有多少个表分区太多?

javascript - 按条件为 contenteditable div 文本字段中的字母着色

javascript - Laravel 数组的 Jquery 选择器验证错误

sql - 如何在 Multi-Tenancy 数据库中使字段 NOT NULL