は私がサインイン用のAuth0を使用して、私は次のコードを持っている場合は動作しませんバインディング:、使用Promise.catch
$scope.login = function() {
$scope.loginFailed = false;
$scope.loading = true;
loaderService.show();
let credentials = {
email: $scope.email,
password: $scope.password
};
principal.signin(credentials)
.then(() => {
$state.go('main.index');
})
.catch(e => {
showError(e.error_description);
loaderService.hide();
});
};
principle
サービスが機能サインインの含まれていますので、
signin(credentials) {
return new Promise((resolve, reject) => {
this.auth.signin({
connection: 'Username-Password-Authentication',
email: credentials.email,
sso: false,
password: credentials.password,
authParams: {
scope: 'openid name email'
}
}, this.onLoginSuccess.bind(this, resolve, reject), this.onLoginFailed.bind(this, reject));
});
}
、あなたが見ることができるように私は約束を作成し、Auth0コールバックに解決/拒否を渡します。 コールバックは非常に単純です:
はonLoginSuccess(resolve, reject, profile, token) {
let userData = this.collectData(profile);
... store token
return this.syncCurrent(userData) //request to server
.then(() => {
return resolve();
})
.catch(() => {
this.signOut();
return reject();
});
}
onLoginFailed(reject, error) {
return reject(error.details);
}
それでは、最初のスニペットに戻りましょう。次のコードがあります:
principal.signin(credentials)
.then(() => {
$state.go('main.index');
})
.catch(e => {
showError(e.error_description);
loaderService.hide();
});
正しいメールとパスワードのリダイレクトがうまく動作し、メインページが表示されます。しかし、間違った電子メール/パスワードを使用すると、catch
ブロックが実行されていることがわかります。デバッガで値が変更されているのがわかりますが、エラーブロックが表示されず、イメージが読み込まれません。私は今、コードをリファクタリングしているので、これはhtmlの問題ではありません。上記のコードはすべて1つのファイルに含まれています。私は約束を使用せず、すべて正常に動作しました。私はprincipal.signin(credentials)
関数の前にshowError
メソッドを実行しようとしましたが、テストのためだけにエラーが発生し、読み込みイメージが隠されていました。だから、私は問題が約束と正確にブロックをキャッチすると思うが、私はどこがわからない。
PS。 showError
は以下の通りである:
function showError(errorText) {
$scope.loading = false;
$scope.loginFailed = true;
$scope.loginErrorMessage = errorText;
}
私は、原因が 'signin()'で非角度の約束を使用していると強く信じています。角度の約束($ q)はダイジェストサイクルを呼び出すため特別です。外部の 'Promise'を使用する必要がある場合は、使用可能なスコープ($ rootScopeなど)で' $ apply() 'を呼び出します。 –
@NikosParaskevopoulosは '$ apply'を試しましたが、今はhtmlでエラーが表示されますが、イメージの読み込みはまだ表示されています。私は 'q'約束を書き直してあなたに知らせようとします。ありがとう。 – user348173
@NikosParaskevopoulosはい、そうです。すべて '$ q'でうまく動作します。再度、感謝します。あなたは答えを作り、私はそれをマークしますか? – user348173