首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时使用() vs链接trx对象

何时使用() vs链接trx对象
EN

Stack Overflow用户
提问于 2017-10-18 07:34:08
回答 1查看 5.4K关注 0票数 7

Knex的事务文档代码如下所示:

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

在这里,我看到了函数transacting()的广泛使用,示例如下所示:

代码语言:javascript
运行
复制
knex.transaction(function(trx) {
   knex('foo')
  .transacting(trx)
  .insert({id:"bar", username:"bar"})
  // etc
 })

Knex用类似于上面的例子描述了transacting()

使用knex.transaction时,事务处理方法可能被链接到任何查询,并传递希望加入查询的对象,作为事务处理的一部分。

我的问题是:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-20 08:19:48

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

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

不知道另一种方法的具体用途。这可能只是一个风格的问题。你有两个接口,你可以选择一个你最喜欢的。至于我,我已经习惯了.transacing(trx)

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46804950

复制
相关文章

相似问题

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