2017-06-18 68 views
1

所以,我有以下es6 js promise:什麼是.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()回調嗎?它會傳入任何錯誤到該回調中,即下一個(錯誤)? 或者它會以不同的方式調用它,比如next(null,error)?

我嘗試轉換上面的代碼,以異步/ 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(下)的',''爲.catch(函數(原因){返回下一個(原因);});' –

回答

0

什麼是.catch(callback)相當於?

這相當於.then(null, callback)。或者也許你正在考慮eta conversion,在這種情況下,它也相當於.catch(err => next(err))

會是什麼實際上做?它會基本上調用next()回調嗎?

是的,這就是回調是如何工作的。

它會通過任何錯誤到該回調中,即next(error)

是的,當承諾將被拒絕的錯誤。

或者它會以不同的方式調用它,如next(null, error)

沒有,爲什麼會呢?

我想將上面的代碼轉換爲async/await,我的嘗試會做同樣的事情嗎?

是的,就.catch而言,假定next不返回任何東西。

相關問題