2017-06-18 12 views
1

だから私はes6 js約束:.catch(コールバック)とは何か?

router.param('username', function (req, res, next, username) 
{ 
    User.findOne({username: username}).then(function (user) 
    { 
     if (!user) 
     { 
      return res.sendStatus(404); 
     } 

     req.profile = user; 

     return next(); 
    }).catch(next); 
}); 

以下この小さなコードは私の問題は、それが実際に何をします.catch(next)

この部分で持っていますか?基本的にnext()コールバックを呼び出しますか?そのコールバックに次のエラー(エラー)が渡されますか? これは、次のような別の方法で呼び出します(null、エラー)?

私は上記のコードをasync/awaitに変換しようとしていますので、以下のコードは上記のコードと全く同じことを行いますか?

router.param('username', async function (req, res, next, username) 
{ 
    try 
    { 
     let user = await User.findOne({username: username}); 

     if (!user) 
     { 
      return res.sendStatus(404); 
     } 

     req.profile = user; 

     return next(); 
    } 
    catch(error) 
    { 
     next(error); 
    } 
}); 
+2

はい、変換は正確です。エラーが唯一の引数として 'next'が呼び出されます。 – Ryan

+0

それを私に確認してくれてありがとう。あなたは参照で質問に答えることができ、私はあなたの答えを受け入れるでしょう –

+1

'.catch(next);' '(.create(reason){return next(reason);});' –

答えて

0

に相当.catch(callback)は何ですか?

.then(null, callback)に相当します。あるいは、あなたはeta conversionを考えていたかもしれません。その場合は.catch(err => next(err))と同じです。

実際にはどうなりますか?基本的にnext()コールバックを呼び出しますか?

はい、それがコールバックの仕組みです。

コールバックにエラーが発生しますか?next(error)

はい、そのエラーで約束が拒否された場合。

next(null, error)などの別の方法で呼び出しますか?

いいえ、なぜでしょうか?

私は上記のコードをasync/awaitに変換しようとしていますが、私の試行はまったく同じことでしょうか?

はい、.catchまでは、nextは何も返しません。