我正在使用 Angular 8 。
在我的服务中,我正在使用一个接受回调函数并在回调函数中提供值的库。
我的服务方式是
raw(qrInfo, res?): Observable<string> {
return manager.getData(res.width, (res1) => {
return of<string>(res1);
});
}
我想订阅此raw()
方法并在控制器中获取res1
的结果
constructor(
private myS: MyService
) {}
data() {
this.myS.raw(info, op).subscribe(res => {
console.log(res); // Get value here
}
}
但这不起作用。 如何从回调函数返回可观测值?
答案 0 :(得分:2)
您可以按照以下documentation在raw()方法中创建一个新的Observable,以将回调结果发送到您的Observable中。
raw(qrInfo, res?): Observable<string> {
/** Returns the freshly created Observable **/
return Observable.create(function(observer) {
/** Call your method with the callback **/
manager.getData(res.width, (res1) => {
/** Emit the callback response to the Observable **/
observer.next(of<string>res1)
/** Complete the Observable to close it **/
observer.complete();
});
});
}
答案 1 :(得分:0)
您可以在MyService内创建一个Subject
,然后从您的组件中进行订阅。
managerData$ = new Subject<any>();
raw(qrInfo, res?): Observable<string> {
manager.getData(res.width, (res1) => {
this.managerData$.next(res1);
});
}
然后在组件中:
constructor(
private myS: MyService
) {
this.myS.managerData$.subscribe((res) => { ... } );
}
data() {
this.myS.raw(info, op);
}
注意:如果您需要退订,可以这样操作:
private managerDataSubscription: Subscription;
constructor(
private myS: MyService
) {
this.managerDataSubscription = this.myS.managerData$.subscribe((res) => { ... } );
}
然后您可以在需要的地方致电this.managerDataSubscription.unsubscribe();
(例如,在ngOnDestroy
中)