요구사항: 프로젝트는 Observables를 Promises로 변환하고 완료를 기다려야 하며, Angular 프로젝트에서 toPromise() 메서드를 사용할 경우 힌트가 폐지되어 firstValueFrom 또는 lastValueFrom 정적 메서드를 사용하는 것이 권장됩니다.
왜 toPromise() 방식을 비추천해야 하나요?
왜냐하면 toPromise() 메서드 이름은 어떤 값을 Promise가 해결할지 절대 표시하지 않기 때문인데, Observables는 시간이 지나면서 여러 값을 생성할 수 있기 때문입니다. 약속으로 변환할 때, 첫 번째로 도착한 값을 선택할지 마지막 값을 선택할지 선택하는 것이 좋습니다. 이 모든 문제를 해결하기 위해 우리는 toPromise()를 비공식 처리하고 promise로 변환하는 두 가지 새로운 헬퍼 함수를 도입하기로 결정했습니다.
그냥 이해하세요관측량은 여러 값을 생성합니다그런 다음약속은 오직 하나의 값만 만듭니다그 후 일부 사용자는 첫 번째 값을 사용하고 싶어 하고, 어떤 사용자는 마지막 값을 사용하려 하므로 firstValueFrom과 lastValueFrom이 나타납니다. (참고: toPromise()는 관측 가능 값들을 얻는 마지막 값입니다)
firstValueFrom 예제
Observable이 완성될 때까지 기다리지 않고 첫 번째 값을 받아야 하므로 firstValueFrom을 사용할 수 있습니다. firstValueFrom은 Observable에서 처음 방출된 값으로 약속을 해석하고 즉시 구독을 해제하여 자원을 보존합니다. 만약 Observable이 값을 출력하지 않고 완성되면, firstValueFrom 역시 EmptyError와 함께 거부됩니다.
lastValueFrom 예제
lastValueFrom은 toPromise()와 거의 동일하며, 이는 관찰 가능 값이 완성되었을 때 도달한 마지막 값으로 파싱하지만, 단일 값을 출력하지 않고 완료될 때는 다르게 동작합니다. Observable이 발화 없이 완료되면, toPromise()는 성공적으로 undefine으로 해결되어(반환 타입이 변경됨), lastValueFrom은 EmptyError로 거부됩니다. 따라서 lastValueFrom의 반환 타입은 <T>Promise이며, 이는 RxJS 6의 toPromise()와 유사합니다.
구문 분석 예시
RxJS에서 간격(1000)은 0부터 시작하는 1000밀리초(즉, 1초)마다 증가하는 수열을 방출하는 관측량을 생성합니다.
다음으로, .pipe(take(10))는 Observable이 방출하는 요소 수를 제한하는 연산자 연쇄입니다. 여기서 take(10)는 처음 10개의 값만 가져간다는 뜻입니다.
이 표현을 자세히 설명해 보겠습니다:
interval(1000): 1초마다 숫자를 방출하는 관측량을 생성합니다. 숫자 순서는 0에서 시작해 매번 1씩 증가합니다.
.pipe(take(10)): .pipe() 메서드를 사용하여 여러 연산자를 연결하세요. 여기서는 take(10) 연산자를 사용하여 Observable이 처음 10개의 값만 출력하도록 제한합니다.
EmptyError 오류 테스트
코드는 다음과 같습니다:
또는
참조:하이퍼링크 로그인이 보입니다. |