파이프 된 간격이 RxJS에서 실행됩니까?

우치하 사스케

파이프 된 간격이 RxJS에서 실행됩니까?

제가 의미하는 바는 다음과 같습니다. 다음 코드가 있다고 가정 해 보겠습니다.

const arr = ["foo", "bar"];
const i = interval(500);
const toRun = i.pipe(
    map(index => arr[index]),
    take(arr.length)
);
toRun.subscribe(val => val);

코드가 다음과 같이 작동한다는 것을 올바르게 이해합니까?

1 i이 생성되지만 구독 할 때까지 실행되지 않습니다.

2 pipe방법 의 도움으로 우리 Observable는에 구축 i되고 다음과 같이 작동하는 새로운를 만듭니다 .

  • 500ms마다 반복 번호 (0, 1, 2, ...)를 내 보냅니다.
  • 반복 번호를 사용하여 arr
  • pipe메소드 결과를 구독 한 사람에게 추출 된 값을 내 보냅니다.
  • 반복 번호가 다음보다 클 때 반복 번호의 방출을 중지합니다. arr.length

따라서 toRun.subscribe(val => val);는 방출 foo하고 500ms 후에 bar실행을 중지합니다. (가) 동안 i, 아무것도 방출하지 않습니다 아무도는에 가입하지 않았기 때문에.

나는 이것이 어떻게 작동하는지 이해하고 싶으므로 내가 틀렸다면 내 질문에 대답하기 위해 내 설명을 수정하십시오.

Angular 문서를 통해 작업하는 동안 다른 질문을 발견했습니다. 보다 구체적으로 비동기 파이프를 통해 . 나는 거기에서 다음 예를 만났다.

import { Component } from '@angular/core';
import { Observable, interval } from 'rxjs';
import { map, take } from 'rxjs/operators';

@Component({
  selector: 'app-hero-message',
  template: `
    <h2>Async Hero Message and AsyncPipe</h2>
    <p>Message: {{ message$ | async }}</p>
    <button (click)="resend()">Resend</button>`,
})
export class HeroAsyncMessageComponent {
  message$: Observable<string>;

  private messages = [
    'You are my hero!',
    'You are the best hero!',
    'Will you be my hero?'
  ];

  constructor() { this.resend(); }

  resend() {
    this.message$ = interval(500).pipe(
      map(i => this.messages[i]),
      take(this.messages.length)
    );
  }
}

그리고 불필요한 실행으로 인해 성능 문제가 있는지 궁금합니다. interval(500)( pipe이는 새로운 Observable을 생성하고 interval(500)명시 적으로 사용 하지 않을 것이기 때문에 pipe새로운 Observable 생성 동안에 )

프리 두

당신은 그것을 거의 정확하게 이해합니다. 몇 가지 참고 :

  • 예, 구독 할 때만 숫자를 interval생성하는 콜드 옵저버 블 을 생성합니다.
  • pipe그 자체로는 새로운 옵저버 블을 생성하지 않을 pipe것입니다.
  • map그리고 눈 take에 띄게 뜨겁게 만들지 마십시오. 그래도 여전히 춥고 구독 할 때만 "실행"됩니다.
  • interval처음에는 방출하기 전에 500ms를 기다립니다 foo(구독 후).
  • take주어진 배출량 후에 관찰 가능한 소스에서 구독을 취소합니다. 이렇게하면 체인의 모든 Observable이 결국 interval구독이 취소 될 때까지 소스 에서 구독을 취소합니다. 따라서 더 이상 숫자를 방출하지 않습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파이프가 실행 된 후에 만 명령이 실행됩니다. 이러한 시나리오에서 파이프는 어떻게 작동합니까?

분류에서Dev

로드 된 ELF 실행 파일간에 .text 섹션이 공유됩니까?

분류에서Dev

CodeBlocks + GCC로 빌드 된 실행 파일이 모든 Windows에서 실행됩니까?

분류에서Dev

Java에서 고정 된 간격 후에 ejb 타이머를 실행할 수 있습니까?

분류에서Dev

이 루프는 왜 무한히 실행됩니까? for 루프에서 쉼표로 구분 된 조건

분류에서Dev

Cronjob이 예정된 시간 전에 실행됩니다. 무엇이 잘못되었을 수 있습니까?

분류에서Dev

Cronjob이 예정된 시간 전에 실행됩니다. 무엇이 잘못되었을 수 있습니까?

분류에서Dev

내 기능이 설정된 간격보다 빠르게 실행됩니다.

분류에서Dev

Jenkins 파이프 라인의 모든 단계가 동일한 호스트에서 실행된다는 것이 보장됩니까?

분류에서Dev

호출 된 프로그램에서 예외가 발생하면 Windows 작업이 계속 실행됩니까?

분류에서Dev

객체가 이미 해제 된 후에 atexit이 실행됩니까?

분류에서Dev

원격 공유에서 프로그램 실행-RAM에서 실행됩니까-수행해도됩니까?

분류에서Dev

파이프 라인의 명령이 동시에 실행됩니까?

분류에서Dev

Win10에서 어떤 파일이 실행됩니까?

분류에서Dev

정렬 된 Pandas 데이터 프레임에서 시간 간격 행 결합 / 병합

분류에서Dev

하드 드라이브를 교체하면 설치된 archlinux가 다른 시스템에서 실행됩니까?

분류에서Dev

Oracle Linux 7 용으로 빌드 된 Docker 이미지가 Red Hat Linux 8에서 실행됩니까?

분류에서Dev

upstart 작업에 실행 시간이 보장됩니까?

분류에서Dev

프로그램이 이상한 순서로 실행됩니까?

분류에서Dev

ssh가 서버 + 명령 인수로 실행될 때 어떤 시작 프로파일이 실행됩니까?

분류에서Dev

고정 된 시간 간격으로 배치 파일에서 코드 조각을 실행하는 방법은 2 시간이고 나머지 코드를 계속 진행합니까?

분류에서Dev

간단한 "Hello World"스타일 프로그램은 실행이 시작된 직후에 종료됩니다.

분류에서Dev

두 개의 파이프 프로그램, 하나는 다른 프로그램이 종료 된 후에도 계속 실행됩니다.

분류에서Dev

HeightMap에서 생성 된 구형 지형에 간격이 있습니다.

분류에서Dev

Windows cmd.exe가 상승 된 권한으로 실행되는 경우 프롬프트에서 실행하는 모든 작업이 상승 된 권한으로 실행됩니까?

분류에서Dev

파이썬 코드가 순서대로 실행됩니까?

분류에서Dev

for 루프 후에 코드 실행이 중지됩니까?

분류에서Dev

자바 8 JVM에서 실행됩니다 (11) 컴파일 된 바이너리 / 항아리를 javac의 수 있습니까?

분류에서Dev

HUE를 통해 실행 된 하이브 쿼리는 연결이 끊긴 후에도 유지됩니까?

Related 관련 기사

  1. 1

    파이프가 실행 된 후에 만 명령이 실행됩니다. 이러한 시나리오에서 파이프는 어떻게 작동합니까?

  2. 2

    로드 된 ELF 실행 파일간에 .text 섹션이 공유됩니까?

  3. 3

    CodeBlocks + GCC로 빌드 된 실행 파일이 모든 Windows에서 실행됩니까?

  4. 4

    Java에서 고정 된 간격 후에 ejb 타이머를 실행할 수 있습니까?

  5. 5

    이 루프는 왜 무한히 실행됩니까? for 루프에서 쉼표로 구분 된 조건

  6. 6

    Cronjob이 예정된 시간 전에 실행됩니다. 무엇이 잘못되었을 수 있습니까?

  7. 7

    Cronjob이 예정된 시간 전에 실행됩니다. 무엇이 잘못되었을 수 있습니까?

  8. 8

    내 기능이 설정된 간격보다 빠르게 실행됩니다.

  9. 9

    Jenkins 파이프 라인의 모든 단계가 동일한 호스트에서 실행된다는 것이 보장됩니까?

  10. 10

    호출 된 프로그램에서 예외가 발생하면 Windows 작업이 계속 실행됩니까?

  11. 11

    객체가 이미 해제 된 후에 atexit이 실행됩니까?

  12. 12

    원격 공유에서 프로그램 실행-RAM에서 실행됩니까-수행해도됩니까?

  13. 13

    파이프 라인의 명령이 동시에 실행됩니까?

  14. 14

    Win10에서 어떤 파일이 실행됩니까?

  15. 15

    정렬 된 Pandas 데이터 프레임에서 시간 간격 행 결합 / 병합

  16. 16

    하드 드라이브를 교체하면 설치된 archlinux가 다른 시스템에서 실행됩니까?

  17. 17

    Oracle Linux 7 용으로 빌드 된 Docker 이미지가 Red Hat Linux 8에서 실행됩니까?

  18. 18

    upstart 작업에 실행 시간이 보장됩니까?

  19. 19

    프로그램이 이상한 순서로 실행됩니까?

  20. 20

    ssh가 서버 + 명령 인수로 실행될 때 어떤 시작 프로파일이 실행됩니까?

  21. 21

    고정 된 시간 간격으로 배치 파일에서 코드 조각을 실행하는 방법은 2 시간이고 나머지 코드를 계속 진행합니까?

  22. 22

    간단한 "Hello World"스타일 프로그램은 실행이 시작된 직후에 종료됩니다.

  23. 23

    두 개의 파이프 프로그램, 하나는 다른 프로그램이 종료 된 후에도 계속 실행됩니다.

  24. 24

    HeightMap에서 생성 된 구형 지형에 간격이 있습니다.

  25. 25

    Windows cmd.exe가 상승 된 권한으로 실행되는 경우 프롬프트에서 실행하는 모든 작업이 상승 된 권한으로 실행됩니까?

  26. 26

    파이썬 코드가 순서대로 실행됩니까?

  27. 27

    for 루프 후에 코드 실행이 중지됩니까?

  28. 28

    자바 8 JVM에서 실행됩니다 (11) 컴파일 된 바이너리 / 항아리를 javac의 수 있습니까?

  29. 29

    HUE를 통해 실행 된 하이브 쿼리는 연결이 끊긴 후에도 유지됩니까?

뜨겁다태그

보관