Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度组件调用调用服务的服务:两者都需要对结果进行处理_Angular_Rxjs_Observable_Subject - Fatal编程技术网

Angular 角度组件调用调用服务的服务:两者都需要对结果进行处理

Angular 角度组件调用调用服务的服务:两者都需要对结果进行处理,angular,rxjs,observable,subject,Angular,Rxjs,Observable,Subject,我不知道这个问题该怎么说 我有一个角度组件,需要调用服务类上的方法。该方法需要通过我自己的http服务调用http方法,然后对结果进行处理 但是组件还需要做一些事情来响应服务调用。所以我有一些类似于以下伪代码的东西: 在组件中: public doSomethingInService(payload: any): void { this.myService.doSomething(payload); // I also need to do something with the

我不知道这个问题该怎么说

我有一个角度组件,需要调用服务类上的方法。该方法需要通过我自己的http服务调用http方法,然后对结果进行处理

但是组件还需要做一些事情来响应服务调用。所以我有一些类似于以下伪代码的东西:

在组件中:

public doSomethingInService(payload: any): void {
    this.myService.doSomething(payload);
    // I also need to do something with the result!
}
在职:

public doSomething(payload: any): void {
    this._httpService.doGet(url).subscibe((result) => {
        // do something with the result
    });
}
好的,现在这个组件永远没有机会做它自己的事情

我尝试过的事情:

  • 让服务方法doSomethingService()返回一个observable而不是void,这样我就可以对成功和错误条件做出响应。问题是:如果它只是返回httpService的doGet()方法提供给我的可观察值:
  • 公共剂量测量(有效载荷:任何):可观察{
    返回此.u httpService.doGet(url);
    //我从来没有机会对结果做出反应
    
    }
    这可以通过使用并返回服务中的可观察项来完成

    服务.ts

    public doSomething(payload: any): Observable<TypeHere> {
        return this._httpService.doGet(url).pipe(tap((result) => {
            // do something with the result
        }));
    }
    
    public doSomethingInService(payload: any): void {
        this.myService.doSomething(payload).subscribe(_ => /* do something */);
    }
    

    水龙头 透明地执行操作或副作用,如日志记录

    如果您希望在将结果返回到组件/订阅服务器之前对其进行转换,则可以改用

    旁注
    我不确定什么是
    doGet
    。只要使用
    get
    就可以了。

    是的,这正是我需要的。非常感谢。现在将读取tap运算符上的值。