FeathersJS - 如何取消挂钩错误

FeathersJS - How to cancel hook on error

在我的注册服务中,我创建了一个 'before' 挂钩来检查用户是否已经注册参加锦标赛。如果发现用户已注册,我会抛出错误。

根据 feathersjs 文档:

If a promise fails, the error will be propagated immediately and will exit out of the promise chain.

我遇到的问题是错误 "triggered" 并显示用户已经注册,但注册仍在进行。意思是,钩子永远不会 "exited".

这是我的函数

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 => {})
    }
}

这是我的"before hook"对象

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

问题是.catch(err => {})。它将 return 一个刚刚通过 undefined 成功解决的承诺,然后它将继续挂钩链,就好像没有发生错误一样。删除它应该可以解决您的问题。