>source

이 논리가 있습니다 :

 public setXXXInLocalStorage(): Observable<boolean> {
    return this.appConfig.getEndpoint('xxx')
      .pipe(
        switchMap((endpoint: Endpoint) => this.http.get(endpoint.toUrl(), {headers})),
        map((body: any) => { localStorage.setItem('myItem', body.item); }),
        timeout(5000),
        map(() => true),
        catchError(() => of(true))
      );
  }

내가 이루고 싶은 것은 최대를 기다리는 것입니다. 요청을 받기까지 5 초가 걸립니다.

  • 스위치 맵 : 엔드 포인트 호출
  • 지도 : 답변 다루기
  • 시간 초과 : 최대 값을 정의하려고했습니다. 5 초 이 전화를 위해
  • 지도 : 성공하면 아무 것도하지 말고 그냥 돌려주십시오
  • catchError : 요청에서 오류가 발생하거나 시간 초과가 발생하면 오류를 무시하고 단순히 true를 반환 할 수도 있습니다

현재 일어나고있는 일은 : get get request가 1 초 안에 성공을 반환하더라도 타임 아웃은 항상 5 초 동안 대기하는 것입니다.

미리 감사합니다 ..

  • 답변 # 1

    와이즈 비즈  연산자는 timeout 를 따릅니다  연산자, 콜백에서 map 로 리턴 된 값   map 에 전달할 값을 결정하므로 연산자가 중요합니다.  논리. timeout 에 반환 값이 없으므로  수술 후 map  운영자에게 timeout 가 전달되었습니다.  소스에서 관측 가능한 배출량을 평가할 때 (HTTP undefined ).

    와이즈 비츠의 관찰 가능  완료되지 않으면 get  연산자는 항상 지정된 시간 이후에 오류를 발생시킵니다.

    undefined 를 사용하는 대신  로컬 스토리지에서 값을 설정하는 부작용으로 timeout 를 사용하십시오.  파이프의 다음 작업자에게 소스를 관찰 할 수 있습니다.

    map
    
    

    tap
    
    

  • 답변 # 2

    이 문제가 해결되었다고 생각합니다. 잠시 후 RXJS 구독을 취소하는 방법

    @Kroltan에서 :

    와이즈 비즈

    그래서 타임 아웃 전에 테이크 (1)를 추가해야했습니다.

    const endpoint = rxjs.of('blah');
    function getRequest(httpObservable, name) {
      return endpoint.pipe(
        rxjs.operators.switchMap(() => httpObservable),
        rxjs.operators.tap((val) => { // Call `tap` instead of `map`
          console.log(`${name}: ${val}`);
        }),
        rxjs.operators.timeout(2000),
        rxjs.operators.map(() => true),
      ).subscribe(
        null,
        () => console.log(`${name} Errored!`),
        () => console.log(`${name} Complete!`)
      );
    }
    const http = rxjs.timer(500);
    const slowHttp = rxjs.timer(4000);
    getRequest(http, 'Quick HTTP');
    getRequest(slowHttp, 'Slow HTTP');
    
    

    <script src="https://unpkg.com/@reactivex/[email protected]/dist/global/rxjs.umd.js"></script>

  • 이전 Docker의 이미지 레이어를 병합하고 이미지 파일을 줄이는 방법
  • 다음 oracle - 간단한 SQL로 수동 증분 구현