我从(预期的结果是一个对象数组)获得了一个意外的可观察性(比如随机)作为响应res:

this.api[op.type](op.endpoint,op.body, op.token).pipe(
        take(1),
        tap(async res=>{
          try{            
            if (res){ //getting Observable here
              //do something with res
            }
          }catch(err){
            console.log(err)
          }
          
        }),
        catchError(async (err)=>{
            //more error handling          
        })

我的api['post']是这样的:

post(endpoint: string, body: any, token? : string, reqOpts?: any, url_alt?: any) {
    this.set_headers(token);
    if (!reqOpts) reqOpts = {};
    this.headers.append({"Content-Type": "application/json"});
    reqOpts.headers = this.headers;
      return this.http.post(this.url + endpoint, body, reqOpts).pipe(
        timeout(105000),
        retry(3),
        catchError(async (error)=>{
          return throwError(error)
        })
  
      );
    }
  }

我会非常感激任何关于这里哪里出了问题的指导

推荐答案

在post的catchError块中有一个问题,那就是在Observable函数返回之前添加了blog c,否则它会正常工作!

服务

import { Injectable } from '@angular/core';
import { of, retry, take, throwError, timeout } from 'rxjs';
import { catchError, tap } from 'rxjs/operators';

@Injectable({
  providedIn: 'root',
})
export class TestService {
  constructor() {}

  post(
    endpoint: string,
    body: any,
    token?: string,
    reqOpts?: any,
    url_alt?: any
  ) {
    // this.set_headers(token);
    if (!reqOpts) reqOpts = {};
    // this.headers.append({"Content-Type": "application/json"});
    // reqOpts.headers = this.headers;
    return throwError('test') // this.http.post(this.url + endpoint, body, reqOpts) // mock http call!
      .pipe(
        timeout(105000),
        retry(3),
        catchError((error) => { // <-- this line is the problem, when I add async before the function Observable gets returned, else it works fine!
          return of(error);
        })
      );
  }

  postWrapper() {
    return this.post('', null).pipe(
      take(1),
      tap(async (res) => {
        try {
          console.log('tap', res);
          if (res) {
            //getting Observable here
            //do something with res
          }
        } catch (err) {
          console.log('catch', err);
        }
      }),
      catchError(async (err) => {
        return of(err);
        //more error handling
      })
    );
  }
}

stackblitz

Angular相关问答推荐

如何在HTMLTITLE属性中使用Angular 显示特殊字符?

如何通过innerHtml在模板中显示动态插入的动感图标?

[NullInjectorError]:R3InjectorError(Standalone[_AppComponent])[]:NullInjectorError:No provider for _HttpClient

MAT-复选框更改事件未在onSubscriberCheck函数中返回选中的值

Angular 单调服务已多次创建

为什么动画只触发一次?

使用 Observable 进行渐进式填充

错误:在@angular/core中找不到导出ɵivyEnabled(导入为ɵivyEnabled)

从具有特定 node 值的现有数组创建新数组

通过 SignalR 事件组件重定向Angular 页面后不起作用

如何在 Angular 2 中使用 protractor ?

Angular 2如何使用路由和location.go()检测后退按钮按下?

Angular 5 中服务的生命周期是什么

未绑定断点 - VS Code | Chrome | Angular

如何使用依赖注入扩展组件?

为什么用?模板绑定中的运算符?

单元测试错误:无法从同步测试中调用 Promise.then

如何在 Angular 2 中链接 HTTP 调用?

IE11中的Angular4应用程序运行问题

Angular2:将数组转换为 Observable