【问题标题】:es6 js promises: What is .catch(callback) equivalent to?es6 js 承诺:.catch(callback) 等价于什么?
【发布时间】: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


【解决方案1】:

.catch(callback) 等价于什么?

相当于.then(null, callback)。或者您可能正在考虑eta conversion,在这种情况下,它也等同于.catch(err => next(err))

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

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

它会将任何错误传递给该回调,即next(error)吗?

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

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

不,为什么会这样?

我正在尝试将上述代码转换为 async/await,我的尝试会做同样的事情吗?

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

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 2016-06-13
    • 2019-04-16
    • 1970-01-01
    • 2019-09-09
    • 2018-09-27
    • 2020-01-01
    • 2019-04-29
    • 1970-01-01
    相关资源
    最近更新 更多