Hier ist ein Beispiel für eine Login-Funktion ist, die zuerst eine accessToken von Facebook bekommt, sendet dann das Token an einen zweiten Dienst das Benutzerprofil zu erhalten.
login(): Observable<any> {
let fas: FacebookAuthResponse = {
accessToken: null,
expiresIn: null,
signedRequest: null,
userID: null,
};
let fbResponse: Subject<any> = new Subject();
let userProfile: Subject<any> = new Subject();
this.fb.login().then((response: FacebookLoginResponse) => {
fbResponse.next(response.authResponse);
}), (error: any) => {
console.error(error);
};
fbResponse
.map((far: FacebookAuthResponse) => far.accessToken)
.mergeMap(accessToken => this.processLogin(accessToken))
.subscribe(res => userProfile.next(res));
return userProfile
}
processLogin (Token) {
let headers = new Headers({ 'Authorization': 'Bearer facebook ' + token });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:8000/user-profile/', options)
}
Hier verwende ich rxjs beobachtbar und rxjs Gegenstand. Ich würde empfehlen, diesen Artikel lesen: http://blog.angular-university.io/how-to-build-angular2-apps-using-rxjs-observable-data-services-pitfalls-to-avoid/
fbResponse.next(response.authResponse);
Wenn this.fb.login behoben ist, rufen Sie als nächstes auf dem fbResponse Vorbehaltlich weiterer Prozess der fb.login Antwort.
.map((far: FacebookAuthResponse) => far.accessToken)
Hier Karte wird verwendet, um den AccessToken von der fbLogin Antwort zu erhalten.
Was als nächstes passiert, ist nicht Teil Ihrer Frage, könnte aber interessant sein.
.mergeMap(accessToken => this.processLogin(accessToken))
.subscribe(res => userProfile.next(res));
mergeMap wir uns zum letzten Anruf in der Anforderungskette subsribe, und diesen Wert zurück.
Wenn wir diese Anmeldeanforderung abonnieren, wird das Benutzerprofil vom letzten Aufruf zurückgegeben, wenn alle Anforderungen synchron ausgeführt werden.
hast du versucht zu versprechen. ?? [Refer] (http://stackoverflow.com/questions/36648263/angular2-observable-and-promise) – Manish
Ich versuche herauszufinden, wie es mit Observablen und Rxjs Operatoren zu tun. –
kannst du deinen Code posten was hast du bisher probiert ?? – Manish