2016-06-13 2 views
1

、データは、未更新のレコードが表示されます。Bookshelf.js - レコードを更新した後、最初のページのロード/クエリは、古いレコードを表示します。私は本棚を使用してヌル、そのデータを表示するページにリダイレクトするように列を設定すると、私が更新するまでリフレッシュデータが表示されたら、正しく

 Table.where({id: req.param.id}).fetch() 
     .catch(function (err) { 
      console.log(err); 
     }) 
     .then(function (results) { 
      results.set('other_column', null); 
      results.save(); 
      results.refresh(); 
      // Redirect to orders page 
      res.redirect('/landing-page'); 
     }); 

ランディングページのクエリはこれです:ここでは、コードです

 Table.where({id: req.param.id}).fetch() 
     .catch(function (err) { 
      console.log(err); 
     }) 
     .then(function (results) { 
      data.results = results.attributes; 
      res.render('display-page', data); 
     }); 

誰もが、私は更新されたレコードを取得することができます方法を知っている、または私は間違ってレコードを更新していた場合、私に知らせていますか?すべてのヘルプ私は、ユーザーがそれを更新した後、古いデータでページをレンダリングすることができないとして、この問題ははるかに高く評価されるだろう解決...

答えて

1

あなたは)(ありますが、同期コードのようなデータを保存する書き込み、その保存されています(そしてしばしばう))( AFTERリフレッシュが起こります。それを変更してみてください:

Table.where({id: req.param.id}).fetch() 
    .catch(function (err) { 
     console.log(err); 
    }) 
    .then(function (results) { 
     return results 
      .set('other_column', null) 
      .save(); 
    }) 
    .then(function (results) { // results should now include the saved data 
     // Redirect to orders page 
     res.redirect('/landing-page'); 
    }); 
+1

また、 'catch'はpromise chainの最後のハンドラでなければなりません。 –

+1

合意済み@RhysvanderWaerden。最後にcatch()を配置すると、連鎖はtry {} catch(){}のようになります。しかし、 'キャッチ()' 'これは、より多くのスタイルのことですが、その後、'(ヌル、機能(E){...})と等価であるから。 – flaviodesousa

+0

が間違っています。あなたのコード例では、 'then'ハンドラがエラーの場合に呼び出されます。 'results'パラメータはcatch''からundefined' 'このケースでは、前のハンドラの戻り値をとります。これはスタイルの問題ではなく、実行時エラーを引き起こします。 –

関連する問題