2016-10-16 12 views
0

古典的なmongooseコールバックとES6の約束事からの違いと利点がわかりません。私はthen() & catch()兄弟の代わりexec()コールバックを好む理由は、いくつかのES6砂糖と この集計クエリMongoose es6約束、エグゼクティブコールバック

router.get('/', function(req,res) { 
caseNote.aggregate([ 
     {$unwind: '$field'}, 
     {$match: {field: "aaa"}}, 
     {$project: {field: 1, _id: 0}} 
    ]) 
    .exec(function(err, data) { 
     if (err) 
      res.json(err); 
     else { 
      if(data[0]) 
       res.json(data[0].field); 
      else 
       res.json([]); 
     } 
    }); 
}); 

router.get('/', cache, function(req,res) { 
    caseNote.aggregate([ 
     {$unwind: '$field'}, 
     {$match: {field: "aaa"}}, 
     {$project: {field: 1, _id: 0}} 
    ]) 
     .exec() 
     .then(data => res.json(data[0] ? data[0].field: {error:"result error"})) 
     .catch(err => res.json(err)); 

}); 

に変えることでしょうか?

答えて

0

catch()メソッドを利用してエラーを1つのコードブロックで処理できるので、コードはより洗練され、より読みやすくなります。

複数のコールバックが存在しないため、この具体的な例では、大きな違いはありません。

これは非常に詳細になる素晴らしい記事です。

https://github.com/getify/You-Dont-Know-JS/blob/master/async%20%26%20performance/ch3.md

+0

私は全体のレポを読んでいただきありがとうございます。一方で、副次的な疑問:ES6ジェネレータは約束によって追い越されるのだろうか、それともそれぞれの目的が異なるのだろうか? – alfredopacino

+0

ES7の非同期関数はジェネレータをベースにしているため、ジェネレータにはさまざまな用途がありますが、実際には逆の方法になると思います。これも本当に良い読書です! http://rossboucher.com/await/#/ –