【发布时间】:2017-06-18 19:22:05
【问题描述】:
所以我下面有这个小代码
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(error) 吗? 或者它会以不同的方式调用它,例如 next(null, error) ?
我正在尝试将上面的代码转换为 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);
}
});
【问题讨论】:
-
是的,您的转换是准确的。
next将使用错误作为唯一参数调用。 -
太棒了。感谢您向我确认。您可以通过参考来回答问题,我会接受您的回答
-
将
.catch(next);视为.catch(function(reason) { return next(reason); });
标签: javascript ecmascript-6 promise try-catch es6-promise