Javascript FeathersJS-如何取消错误挂钩

Javascript FeathersJS-如何取消错误挂钩,javascript,feathersjs,Javascript,Feathersjs,在我的注册服务中,我创建了一个“before”钩子来检查用户是否已经注册到锦标赛。如果发现用户已注册,我会让它抛出一个错误 根据FeatherJS文档: 如果承诺失败,错误将立即传播并将 退出承诺链 我遇到的问题是错误被“触发”,并显示用户已经注册,但注册仍然发生。也就是说,钩子永远不会“退出” 这是我的功能 exports.checkRegistered = () => { return (hook) => { let tourneyId = hook.da

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

根据FeatherJS文档:

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

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

这是我的功能

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()
  ]
};

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

因为那次投掷可能会在比赛结束后进行。我的建议是返回承诺。我尝试了return-promise.reject(新错误('Error message')),但注册仍然进行。我做得不对吗?嗯。。它应该会起作用。不如试着用承诺来包装它,就像我要尝试的例子一样。谢谢你的指导!谢谢,达夫,这解决了问题!