Promise<User>
の結果を返すfirebase.login()
を呼び出すuserService
があります。 UIコンポーネントでは、私は、ログイン(すなわち、成功またはエラー)の結果に反応する必要があり、他の場所プロジェクト内サービスからプロミスを使用する方法(ネイティブスクリプト/ firebase)?
firebase.login({ config...
})
.then (function (result) { /* use result */},
function (error) { /* use error */ });
:このように呼ばれています。私はルーティングや類似のロジックをユーザサービスに入れるのではなく、次に起こることを他のコンポーネントが制御するようにしたい。
どうしたのですか?他のコンポーネントはどのようにそれに反応できますか?
上記の成分は、LoginPage
と呼ばれるクラスです。これにはLogin
ボタンがあり、Firebaseログインを開始する必要があります。このボタンは、LoginPage
クラスの関数(login()
とも呼ばれます)にリンクされています。
XML:then
句は関係なく、常にログインの成功または失敗の、実行されるように
<Button [text]="Sign in" class="submit-button" (tap)="login()"></Button>
login.component.ts
login() {
this._userService.login(this.user)
.then(function (data) {
/* go to next screen */
});
}
上記は、明らかに間違っています。ここで
はuserService
でのログイン機能である:
@Injectable()
export class UserService {
login(user: User) {
firebase.login({
type: firebase.LoginType.PASSWORD,
email: user.email,
password: user.password
})
.then(function (result) {
console.log("Successful Login! " + JSON.stringify(result));
return result;
}, function (error) {
console.log(error);
return error;
});
}
コードの2番目の部分はAngularJSではなくAngular 2です。 'http'要求はRxJSが観測可能であり、約束ではありません! login()関数を呼び出すログインボタンとその他の関連コードのコードを指定することで、質問を改善できます。 – estus
私はこれが異なっていることを認識しています(私の質問では、命名法なしでさえ多く述べました)。あなたはおそらく質問に答えることを試みることができますか?私は、ボタンとコントローラの 'login()'関数の間のリンクは意味がないと思う。私はその機能でサービスをどのように消費するかを知る必要があります。 – Mundi
質問は現在のフォームで質の高い回答を得ることはできませんが、あなたのケースが何であるかは明確ではありません。 「その機能」とは何ですか?質問に関連するコードを明記し、回答者が重要であるかどうかを判断させてください。 – estus