Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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 7:返回http响应和相同调用的结果?_Angular_Typescript_Rxjs_Httprequest_Httpresponse - Fatal编程技术网

Angular 7:返回http响应和相同调用的结果?

Angular 7:返回http响应和相同调用的结果?,angular,typescript,rxjs,httprequest,httpresponse,Angular,Typescript,Rxjs,Httprequest,Httpresponse,我在angular web应用程序中实现了这个调试菜单,以便使用JsonEditor将请求发送到后端。到目前为止,我只需要返回http响应来显示响应代码,看看请求是否成功。然而,现在我有了另一个用例,在这个用例中,我必须发送一个请求,并且不仅返回http响应代码,还返回请求的实际结果。这些请求将影响实际数据,因此我不能发送两次相同的请求。是否可以同时返回http响应和结果 getObject(data: any): Observable<any> { let httpOp

我在angular web应用程序中实现了这个调试菜单,以便使用JsonEditor将请求发送到后端。到目前为止,我只需要返回http响应来显示响应代码,看看请求是否成功。然而,现在我有了另一个用例,在这个用例中,我必须发送一个请求,并且不仅返回http响应代码,还返回请求的实际结果。这些请求将影响实际数据,因此我不能发送两次相同的请求。是否可以同时返回http响应和结果

  getObject(data: any): Observable<any> {
    let httpOptions = this.kecloakService.buildHeaderWithToken();
    let httpParams = new HttpParams().set("data", data);
    httpOptions = _.extend(httpOptions, httpParams);
    httpOptions = _.extend(httpOptions, { observe: 'response' });

    let resultSubject = new AsyncSubject<any>();

    this.configurationService.loadNetworkConfiguration(false).subscribe((config: NetworkConfiguration) => {
      if (config) {
        let resultObservable = this.http.get(config.backendHostUrl + "ObjectData/", httpOptions);
        //Http response
        //resultObservable.subscribe((response: Response) => {

        //Result 
        resultObservable.subscribe((result: any) => {
          resultSubject.next(result);
          resultSubject.complete();
        }, error => {
          resultSubject.next(error);
          resultSubject.complete();
        });
      }
    });

    return resultSubject;
  }
这是一个反模式订阅,位于订阅中,这是代码中发生的事情

为什么不使用像map和switchMap这样的RxJS操作符呢

在这里,尝试一下:

getObject(data: any): Observable < any > {
  let httpOptions = this.kecloakService.buildHeaderWithToken();
  let httpParams = new HttpParams().set("data", data);
  httpOptions = _.extend(httpOptions, httpParams);
  httpOptions = _.extend(httpOptions, {
    observe: 'response'
  });

  return this.configurationService.loadNetworkConfiguration(false)
  .pipe(
    map((config: NetworkConfiguration) => {
      if (config) {
        return this.http.get(config.backendHostUrl + "ObjectData/", httpOptions);
      } else {
        return of({ error: 'Something went wrong!' });
      }
    })
  );
}
我还没有测试过这个,但我看不出为什么它不工作

请尝试一下,如果没有,请告诉我:

希望这能有所帮助。

这是一个反模式订阅,它位于订阅中,这就是代码中发生的情况

为什么不使用像map和switchMap这样的RxJS操作符呢

在这里,尝试一下:

getObject(data: any): Observable < any > {
  let httpOptions = this.kecloakService.buildHeaderWithToken();
  let httpParams = new HttpParams().set("data", data);
  httpOptions = _.extend(httpOptions, httpParams);
  httpOptions = _.extend(httpOptions, {
    observe: 'response'
  });

  return this.configurationService.loadNetworkConfiguration(false)
  .pipe(
    map((config: NetworkConfiguration) => {
      if (config) {
        return this.http.get(config.backendHostUrl + "ObjectData/", httpOptions);
      } else {
        return of({ error: 'Something went wrong!' });
      }
    })
  );
}
我还没有测试过这个,但我看不出为什么它不工作

请尝试一下,如果没有,请告诉我:


希望这有帮助。

这能回答您的问题吗?这回答了你的问题吗?