【问题标题】:FeathersJS - How to cancel hook on errorFeathersJS - 如何取消挂钩错误
【发布时间】:2017-06-07 19:07:20
【问题描述】:

在我的注册服务中,我创建了一个“之前”挂钩来检查用户是否已经注册到锦标赛。如果发现用户已注册,我让它抛出一个错误。

每个 feathersjs 文档:

如果一个promise失败,错误将立即传播,并将 退出承诺链。

我遇到的问题是错误被“触发”并显示用户已经注册,但注册仍然发生。意思是,钩子永远不会“退出”。

这是我的功能

exports.checkRegistered = () => {
    return (hook) => {
        let tourneyId = hook.data.tourneyId
        let userId = hook.data.userId

        return hook.service.find({
            query: {
                tourneyId: tourneyId,
                userId: userId
            }
        }).then(reg => {
            // User already registered
            if (reg.data.length != 0) {
              // Also tried to return a promise with same result.
              // return Promise.reject(new Error('Already registered.'))
              throw new Error('Already registered');
            }
        }).catch(err => {})
    }
}

这是我的“挂钩前”对象

exports.before = {
  create: [
    api.checkRegistered()
  ]
};

【问题讨论】:

  • 因为在那之后投掷可能会去接球。我的建议是回报一个承诺。
  • 我尝试了 return Promise.reject(new Error('Error message')),但注册仍然通过。我做错了吗?
  • 嗯..它应该工作。试试用一个承诺包装它怎么样,就像例子here
  • 我会试试看的。感谢您的指导!

标签: javascript feathersjs


【解决方案1】:

问题是.catch(err => {})。它将返回一个使用undefined 成功解决的promise,然后它将继续钩子链,就好像没有发生错误一样。删除它应该可以解决您的问题。

【讨论】:

  • 感谢达夫,这解决了问题!
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2017-09-20
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多