programing

Rxjs to Promise()가 더 이상 사용되지 않습니다.

telebox 2023. 9. 9. 09:27
반응형

Rxjs to Promise()가 더 이상 사용되지 않습니다.

나는 그것을 읽었습니다.toPromise()는 RxJS 7에서 더 이상 사용되지 않으며 RxJS 8에서는 제거됩니다.저는 http 호출을 처리하기 위해 각진 비동기 구문과 함께 자주 사용해왔습니다.안티패턴으로 간주되나요?스트림의 개념은 이해하지만 http call은 하나의 값만 내보냅니다.단순한 http 통화에 대해 관찰할 수 있는 요점을 모르겠습니다.다음에는 어떤 걸 써야 합니까?반응형 프로그래밍을 완전히 수용해야 합니까?

왜 이런 일이 생기는 건가요?

여기서 언급한 바와 같이, 이것들이 주요한 이유입니다.toPromise감가 상각 중:

  1. 한가지 목표는 그것을 제거하는 것이었습니다.Observable프로토타입을 제작하여 독립형 유틸리티 기능으로 전환할 수 있습니다.

  2. 작명은toPromise최고가 아닙니다.특히 와 함께 사용할 경우await잘 읽히지 않습니다.await categories$.toPromise()await lastValueFrom(categories$)

  3. 의 유형 정보toPromise틀렸습니다.출처가 언제Observable단 하나의 값도 발산하지 않고 완성되었습니다 - 로 해결되었습니다.undefined. 그 경우에는 거절해야 합니다. A.Promise값이 해결될 때 값이 존재하고 존재한다는 "결과"입니다.undefined. 그러나 스트림이 값을 방출하지 않고 완료되면 방출된 스트림을 구별할 수 없습니다.undefined일부러 그리고 더 이상 발산하지 않고 완성된 시냇물.

다음에 무엇을 사용해야 합니까?

정말 약속대로 해야 한다고 주장한다면,lastValueFrom/firstValueFrom. 그렇지 않으면 반응형 프로그래밍으로 전환하는 것이 방법이 될 것입니다.

사용.toPromise( 사용 안 함) -

public async loadCategories() {
    this.categories = await this.inventoryService
      .getCategories()
      .toPromise()
}

사용.lastValueFrom(새것) -

import { lastValueFrom } from 'rxjs';

public async loadCategories() {
    const categories$ = this.inventoryService.getCategories();
    this.categories = await lastValueFrom(categories$);
} 

이 링크는 도움이 될 것입니다.

https://indepth.dev/graphics/1287/graphicsjs-promise-in-being-comparation

firstValueFrom그리고.lastValueFrom여러 가지 이유로 보다 나은 대안이 될 수 있습니다.

  1. 이름을 짓는 것이 더 읽기 쉽고 설명력이 뛰어납니다.
  2. 처음 또는 마지막 값을 선택할 수 있는 추가 기능입니다.
  3. 관측 가능한 값이 전혀 방출되지 않은 경우 기본값을 선언할 수 있는 추가 기능await lastValueFrom(data$, {defaultValue: 'Some default value'})

이에 대한 자세한 내용은 아래 비디오를 확인하십시오.
https://www.youtube.com/watch?v=3aeK5SfWBSU

코드 예제:

사용하지 않는 용도:

await this.http.post<boolean>(`/someApi`).toPromise()
  .then((value) => {
    console.log(`Result: ` + value);
  })

새 코드:

import { firstValueFrom } from 'rxjs';

await firstValueFrom(this.http.post<boolean>(`/someApi`))
  .then((value) => {
    console.log(`Result: ` + value);
  })

언급URL : https://stackoverflow.com/questions/67044273/rxjs-topromise-deprecated

반응형