es6 js promises:什么是.catch(回调)相当于?

时间:2017-06-18 19:22:05

标签: javascript ecmascript-6 promise try-catch es6-promise

所以我在下面有这个小代码

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)?

我正在尝试将上面的代码转换为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);
    }
});

1 个答案:

答案 0 :(得分:0)

  

.catch(callback)等同于什么?

相当于.then(null, callback)。或许你在想eta conversion,在这种情况下,它也相当于.catch(err => next(err))

  

它实际上会做什么?它基本上会调用next()回调吗?

是的,这就是回调的工作原理。

  

是否会将任何错误传递给该回调,即next(error)

是的,当承诺因该错误而被拒绝时。

  

或者它会以不同的方式调用它,例如next(null, error)

不,为什么会这样?

  

我正在尝试将上面的代码转换为异步/等待,我的尝试会做同样的事情吗?

是的,就.catch而言,假设next没有返回任何内容。