一种方法是实现一个回调,您可以传递方法参数。像这样。
getUserDocInfo(callback) {
this.getUserInfo().then(() => {
this.userDoc = this.afs.doc(`users/${this.userID}`);
this.user = this.userDoc.snapshotChanges();
this.user.subscribe(callback);
})
}
getToken(){
this.userService.getUserDocInfo((value) => {
console.log(value.payload.data());
});
}
你可以退回一个
Observable
也可以在组件上下文中订阅它,并且可以根据需要处理订阅。
import { Observable } from 'rxjs/Observable/';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/mergeMap';
@Injectable()
export class AlertService {
//constructor and properties...
getUserDocInfo(): Observable {
Observable.fromPromise(this.getUserInfo()).mergeMap(() => {
this.userDoc = this.afs.doc(`users/${this.userID}`);
this.user = this.userDoc.snapshotChanges();
return this.user.map(user => user);
});
}
}
@Component(...)
export class MyComponent implements OnDestroy {
subscriptions: Array = new Array;
//constructor
getToken(){
const sub = this.userService.getUserDocInfo().subscribe((value) => {
console.log(value.payload.data());
});
this.subscriptions.push(sub);
}
ngOnDestroy() {
this.subscriptions.forEach(sub => sub.unsubscribe());
}
}