RxJs 탭 연산자로 변수 설정

ArKan

RxJ awaiting_response에서 사용하여 변수 (아래)를 true (설정되지 않음)로 설정하는 데 어려움이있었습니다 tap().

해키 솔루션은 외부 설정으로 만들어 pipe()졌지만 이상적이지 않은 것 같습니다.

동일한 코드를 볼 수 있습니다 여기에

여기 있습니다 component.ts

import { Component, OnInit } from "@angular/core";
import { Observable, Subject, of } from "rxjs";
import { debounceTime, distinctUntilChanged, tap, switchMap, catchError, finalize } from "rxjs/operators";
import { ServiceApiService, ITemp } from "./service-api.service";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
  protected addresses: Observable<ITemp[]>;
  private search_term: Subject<string> = new Subject<string>();
  protected executing_search: boolean = false;
  protected awaiting_response: boolean = false;

  constructor(private search: ServiceApiService) {}

  ngOnInit() {
    this.addresses = this.search_term.pipe(
      debounceTime(3500),
      distinctUntilChanged(),
      tap(() => (this.awaiting_response = true)),
      tap(() => () => console.log("awaiting", this.awaiting_response)),
      switchMap((term: string) =>
        this.search.search_addresses(term).pipe(
          catchError(() => of<ITemp[]>([]))
          //finalize(() => setTimeout(() => (this.awaiting_response = false), 0))
        )
      ),
      tap(() => (this.awaiting_response = false)),
      tap(() => console.log("awaiting", this.awaiting_response)),
      tap(() => (this.executing_search = false))
      //finalize(() => (this.awaiting_response = false))
    );
  }

  execute_search() {
    this.executing_search = true;
    this.search_term.next("term");
  }
}

그만큼 service

import { Injectable } from "@angular/core";
import { Observable, Subscriber } from "rxjs";

export interface ITemp {
  value: string;
}

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

  search_addresses(term: string): Observable<ITemp[]> {
    return Observable.create((observer: Subscriber<any>) => {
      observer.next([{ value: `response: ${new Date().toString()}` }]);
      observer.complete();
    });
  }
}

그리고 component.html

<button (click)="execute_search()">Search</button>
<div>Awaiting: {{awaiting_response | json}}</div>
<div>Executing {{executing_search | json}}</div>
<div>Response: {{addresses | async | json}}
아 라빈 드

짧은 대답은 코드가 예상대로 작동해야한다는 것입니다.

여기에 설명이 있습니다. 귀하 awaiting_response는 true로 설정되어 있지만 observer서비스의 값이 즉시 방출 되므로 차이를 볼 수 없습니다.

timeout다음과 같이 서비스에서 설정 한 차이점을 보여주기 위해 ,

search_addresses(term: string): Observable<ITemp[]> {
    return Observable
    .create((observer: Subscriber<any>) => {
      setTimeout(() => {
        observer.next([{ value: `response: ${new Date().toString()}` }]);
        observer.complete();
      }, 3000);
    });
}

stackblitz 의 차이점을 볼 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

RxJS로 함수 / 연산자 작성

분류에서Dev

매개 변수에서 사용자 지정 RxJS 연산자의 스트림 변수에 액세스

분류에서Dev

RxJs : 연산자를 파이프 연산자에 인수로 분산 할 수 있습니까?

분류에서Dev

정수 변수로 작동하지 않는 % 연산자

분류에서Dev

변수가 설정된 경우에만 SELECT 연산자 'AND'사용

분류에서Dev

탭 제목을 상단으로 설정할 수 없습니다.

분류에서Dev

여러 변수 정의 및 OR 연산자로 비교

분류에서Dev

문자열로 정의 된 연산자에서 산술 연산 수행

분류에서Dev

변수 C #으로 탭에 값을 지정하는 방법

분류에서Dev

변수로 쿼리의 연산자와 논리를 설정하는 방법은 무엇입니까?

분류에서Dev

RXJS에서 파이프 가능한 연산자를 함수로 추출

분류에서Dev

jre 환경 매개 변수를 설정할 때 Java 제어판 시스템 탭 또는 사용자 탭을 사용해야합니다.

분류에서Dev

ESS 설정 탭 공백 수준?

분류에서Dev

DocuSign SOAP API-탭 글꼴 설정으로 글꼴이 변경되지 않음

분류에서Dev

현재 탭의 주소를 열어 펜타 닥틸로 수정 / 수정 / 변경

분류에서Dev

RxJS filter () 연산자

분류에서Dev

Azure Function에서 연결 문자열을 앱 설정 / 환경 변수로 설정

분류에서Dev

변수로 "style = width :"설정

분류에서Dev

사용자 정의 UIView의 탭 변경

분류에서Dev

동적으로 탭에 날짜 설정

분류에서Dev

& 연산자를 사용하여 기능을 기본 매개 변수로 지정

분류에서Dev

echo 내부의 bash 변수로 dirname에 피연산자를 지정

분류에서Dev

rxjs 6에서 함수 본문으로 switchMap 연산자를 연결하는 방법

분류에서Dev

로컬로 설정하거나 사용할 수있는 브라우저 탭 식별자가 있습니까?

분류에서Dev

프로젝트 / 설정 탭에 탭 추가 [Redmine]

분류에서Dev

프로젝트 / 설정 탭에 탭 추가 [Redmine]

분류에서Dev

새로운 연산자 자바에서 정수 캐싱

분류에서Dev

새 탭을 연 후 손실 된 변수

분류에서Dev

정적으로 확인 된 유형 매개 변수로 중위 연산자 연결

Related 관련 기사

  1. 1

    RxJS로 함수 / 연산자 작성

  2. 2

    매개 변수에서 사용자 지정 RxJS 연산자의 스트림 변수에 액세스

  3. 3

    RxJs : 연산자를 파이프 연산자에 인수로 분산 할 수 있습니까?

  4. 4

    정수 변수로 작동하지 않는 % 연산자

  5. 5

    변수가 설정된 경우에만 SELECT 연산자 'AND'사용

  6. 6

    탭 제목을 상단으로 설정할 수 없습니다.

  7. 7

    여러 변수 정의 및 OR 연산자로 비교

  8. 8

    문자열로 정의 된 연산자에서 산술 연산 수행

  9. 9

    변수 C #으로 탭에 값을 지정하는 방법

  10. 10

    변수로 쿼리의 연산자와 논리를 설정하는 방법은 무엇입니까?

  11. 11

    RXJS에서 파이프 가능한 연산자를 함수로 추출

  12. 12

    jre 환경 매개 변수를 설정할 때 Java 제어판 시스템 탭 또는 사용자 탭을 사용해야합니다.

  13. 13

    ESS 설정 탭 공백 수준?

  14. 14

    DocuSign SOAP API-탭 글꼴 설정으로 글꼴이 변경되지 않음

  15. 15

    현재 탭의 주소를 열어 펜타 닥틸로 수정 / 수정 / 변경

  16. 16

    RxJS filter () 연산자

  17. 17

    Azure Function에서 연결 문자열을 앱 설정 / 환경 변수로 설정

  18. 18

    변수로 "style = width :"설정

  19. 19

    사용자 정의 UIView의 탭 변경

  20. 20

    동적으로 탭에 날짜 설정

  21. 21

    & 연산자를 사용하여 기능을 기본 매개 변수로 지정

  22. 22

    echo 내부의 bash 변수로 dirname에 피연산자를 지정

  23. 23

    rxjs 6에서 함수 본문으로 switchMap 연산자를 연결하는 방법

  24. 24

    로컬로 설정하거나 사용할 수있는 브라우저 탭 식별자가 있습니까?

  25. 25

    프로젝트 / 설정 탭에 탭 추가 [Redmine]

  26. 26

    프로젝트 / 설정 탭에 탭 추가 [Redmine]

  27. 27

    새로운 연산자 자바에서 정수 캐싱

  28. 28

    새 탭을 연 후 손실 된 변수

  29. 29

    정적으로 확인 된 유형 매개 변수로 중위 연산자 연결

뜨겁다태그

보관