2016-06-30 3 views
1

を実行していないノードKnex挿入:私はノードでこの膝のクエリを実行してい

return Knex.transaction(function (tx) { 
     debug("Inserting new story record"); 
     return tx.insert({ 
      'projectId':projectId, 
      'title': title, 
      'story': text, 
      'points': 0, 
      'storyNumber': Knex('story').max('storyNumber').where('projectId', projectId) 
     }, 'id') 
      .into('story') 
      .then(function (id) { 
       debug("Returning story for %s", id); 
       return getStory(id); 
      }) 
    }) 

しかし「を()」関数が呼び出されることはありません。誰でも知っている理由は?

私はすべてのknexドコを読んできました。私はすべてのことを正しく行ったようです。コマンドのデバッグは次のようになります。

crux:db Inserting new story record +4ms 
{ method: 'insert', 
    options: {}, 
    timeout: false, 
    cancelOnTimeout: false, 
    bindings: [ 0, 2, 'test', 2, 'title' ], 
    __knexQueryUid: 'aa5ff1d3-eff0-4687-864b-772c26e1aebd', 
    sql: 'insert into `story` (`points`, `projectId`, `story`, `storyNumber`, `title`) values (?, ?, ?, (select max(`storyNumber`) from `story` where `projectId` = ?), ?)' } 

だから私にはうまく見えます。ただ実行することはありません。

答えて

0

詳細情報が必要です...トランザクションをトリガーすることは決してできません。トランザクションは.thenが呼び出されるか、またはプロミスチェーンで解決しようとするまで実行されません(QueryBuilderとTransactionはPromise A + specがthenableshttps://promisesaplus.com 1.2と呼ぶものです)。

他の可能性は、挿入がエラーをスローし、すべてがロールバックされ、その後も呼び出されないことです。

いくつかのエラーケースを処理し、あなたが本当の理由を知るために役立つかもしれない、このいずれかを試してみてください:.insertでも

return Knex.transaction(function (tx) { 
    debug("Inserting new story record"); 
    return tx.insert({ 
    'projectId':projectId, 
    'title': title, 
    'story': text, 
    'points': 0, 
    'storyNumber': Knex('story').max('storyNumber').where('projectId', projectId) 
    }) 
    .into('story') 
    .then(function (id) { 
    debug("Returning story for %s", id); 
    return getStory(id); 
    }) 
    .catch(function (err) { 
    debug("Insert failed", err); 
    throw err; 
    }) 
}) 
// just to make sure that transaction is triggered (in your code caller is responsible of that) 
.then(function (blah) { return blah; }); 
.catch(function (err) { debug("Huh! Transaction failed!", err); throw err; }); 

({...}、戻っ)あなたは」doesnのMySQLを使用しているように見えます戻り引数を渡します。だから私は私の提案からそれを落とした...

関連する問題