3 votes

Quand utiliser Knex transacting() ou enchaîner avec l'objet trx ?

La documentation de Knex sur les transactions contient un code qui ressemble à ceci :

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');
    });
    });
})

Sur SO, j'ai constaté l'utilisation intensive d'une fonction transacting() avec des exemples qui ressemblent à ceux-ci :

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

Knex décrit transacting() avec des exemples similaires à ceux cités ci-dessus :

Utilisée par knex.transaction, la méthode transacting peut être enchaînée à n'importe quelle requête et passer l'objet que vous souhaitez joindre à la requête en tant que partie de la transaction.

Ma question est la suivante :

Quelle est la différence entre trx.insert().into('foo') y knex('foo').transacting(trx).insert() et pourquoi utiliser l'un plutôt que l'autre ?

5voto

coockoo Points 1148

Il est facile à utiliser .transacting(trx) lorsque vous souhaitez effectuer plusieurs opérations dans la même transaction :

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)
    }))
})

Je ne connais pas vraiment d'usage particulier de l'autre méthode. Il s'agit peut-être simplement d'une question de style. Vous avez deux interfaces et vous pouvez choisir celle que vous préférez. Pour ma part, j'ai l'habitude de .transacing(trx)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X