2017-06-06 7 views
0

私の登録サービスでは、ユーザーが既にトーナメントに登録されているかどうかを確認するための 'before'フックを作成しました。ユーザーが登録されていることが判明した場合、私はエラーを投げます。 PERはドキュメントfeathersjsFeathersJS - エラー時にフックをキャンセルする方法

:約束が失敗した場合

を、エラーがすぐに反映されますと約束チェーンのうちだろう 終了。

私が抱えている問題は、「トリガーされて」、ユーザーが既に登録済みであることを示していますが、登録はまだ行われているという問題です。意味、フックは決して "出る"ことはありません。

は、ここに私の機能ここで

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

そのスローはおそらく当時の後にキャッチに移動するためです。私のアドバイスは約束を返す。 – Jalil

+0

Promise.reject(新しいエラー( 'エラーメッセージ'))を返そうとしましたが、登録はまだ実行されます。私はそれを間違ってやっていますか? –

+0

うーん..それは動作するはずです。どのように約束でそれをラップしてみてください、ちょうどここの例[ここ](https://github.com/feathersjs/feathers-docs/blob/master/api/hooks.md#asynchronous-hooks)のように – Jalil

答えて

1

問題が.catch(err => {})であるです。 undefinedで正常に解決される約束が返され、エラーが発生していないかのようにフックチェーンが継続されます。それを削除すると問題が解決するはずです。

+0

Daffさん、ありがとうございます、これで問題は解決しました! –

関連する問題