如何从Callback返回Observable



我有一个服务,我想在其中实现SDK的逻辑。从这个SDK中,我想调用一个返回有效负载的事件。
我想创建一个调用事件的方法,并将其包装在一个可观察对象中,以便能够订阅事件的响应。我还创建了一个接口,以确保sdk响应的类型安全。

这是目前已经创建的内容:

export interface SdkPayload{
avatar,
name,
jobTitle,
availability
}
export class TestService {
sdk:someSDK;

//method that returns an Observable
getPayload$(): Observable<SdkPayload[]> {

//创建一个新的Observable,它的类型在Interface中定义SdkPayload[]>((subscriber) =>{const callbackFunction =(sdkPayload: sdkPayload[]) =比;{

this.someSDK.on('connected', (payload) => {

payload.greeting.agent.avatar,
payload.greeting.agent.name,
payload.greeting.agent.jobTitle,
payload.availability;
});

subscriber.next(sdkPayload);
};
this.customerSDK.on('connected', callbackFunction);
return () => {
this.customerSDK('off', callbackFunction);
};
});
}

组件:

export class AppComponent{
payloadResults$: Observable<SdkPayload[]>;

constructor (private service:TestService){}

callMethod(){
this.payloadResults$=this.service.getPayload$();
}
}

我有一种感觉,我从sdk中使用的事件没有正确实现或正确包装在Observable中。最后,我的目标是将SDK响应封装到一个可观察对象中,这样我就可以订阅它的响应。

您可以创建一个主题。关于Service Class init a subject:

sdkPayloadSubject = new Subject<SdkPayload[]>();
// transfor subject to an observable
payloadResults$: Observable<SdkPayload[]> = this.sdkPayloadSubject.asObservable();
//add method accept each triggered sdk value
newLoadedSdkValue(newSdkPayload:SdkPayload[]){
this.sdkPayloadSubject.next(newSdkPayload);
}

在你的getPayload函数中,你可以使用上面的函数来触发新的可观察值,而不是:

subscriber.next(sdkPayload);

使用

this.newLoadedSdkValue(sdkPayload);

那么在你的组件类中,你可以使用新的可观察对象格式

constructor (private service:TestService){
this.payloadResults$ = this.service.payloadResults$
}

最新更新