Programing

관찰 가능 소스가 방출되지만 최신 값만 사용할 때 관찰 가능한 다른 관찰 가능 소스로 전환하는 방법

c10106 2022. 4. 3. 19:42
반응형

관찰 가능 소스가 방출되지만 최신 값만 사용할 때 관찰 가능한 다른 관찰 가능 소스로 전환하는 방법

나는 두개의 관찰력이 있다.

  • load$시작 시 또는 다시 로드 버튼을 클릭했을 때 발생하는 로드 이벤트 스트림
  • selection$선택한 목록 항목의 스트림이며, 목록 항목을 선택할 때 내보냄

A가 내보내는 최신 값을 받을 수 있는 교환원이 있는지 궁금하다.selection$언제든지load$방출하는 동안 (B)가 방출하는 값을 무시하는 동안load$.

을 사용하여 (A)를 성취할 수 있었다.withLatestFrom하지만 그것은 만족스럽지 못하다 (B)withLatestFrom관측 가능한 근원을 무시하지 않는다.

load$.withLatestFrom(selection$).subscribe(([_, latestSelection) => {
  // _ is not needed and I don't like to write code like this
  // I only need the latest selection
});

나는 본 적이 있다.switchMapTo(B)를 만족하지만 (A)를 충족하지 않고 (A)도 사용하지 않음first()또는take(1).

load$.switchMapTo(selection$.take(1)).subscribe(latestSelection => {
  // I would like to avoid having to use take(1)
});

가정적인 걸 찾고 있는데switchMapToLatestFrom교환원의

load$.switchMapToLatestFrom(selection$).subscribe(latestSelection => {
  // switchMapToLatestFrom doesn't exist :(
});

불행히도 그것은 존재하지 않고 나는 내가 생각해낸 다른 두 가지 방법이 마음에 들지 않는다. 왜냐하면 왜 코드에 그 코드가 들어있는지 바로 알 수 없기 때문이다.take(1)또는 사용되지 않는 인수.

새로운 관측 가능이 첫 번째 관측 가능이 방출될 때마다 두 번째 관측 가능에서 가장 최근의 값만 방출하도록 두 관측 가능을 결합하는 다른 방법이 있는가?

withLatestFrom 선택권이 있다.project값을 통과한 기능.

값을 무시하는 데 사용할 수 있음load$최신 선택 항목만 발표:

load$
  .withLatestFrom(selection$, (load, selection) => selection)
  .subscribe(selection => {
    // ...
  });

"샘플" 연산자를 사용하는 경우:

selection$.pipe(sample(load$)).subscribe(
   // the code you want to run
)

참조URL: https://stackoverflow.com/questions/45076790/how-to-switch-to-another-observable-when-a-source-observable-emits-but-only-use

반응형