반응형
Rx Observable에서 어떻게 ʻawait` 할 수 있습니까?
관찰 가능한 것을 기다릴 수 있기 때문에 바랍니다.
const source = Rx.Observable.create(/* ... */)
//...
await source;
순진한 시도는 즉시 해결되고 실행을 차단하지 않습니다.
편집 : 내 전체 사용 사례에 대한 의사 코드는 다음과 있습니다.
if (condition) {
await observable;
}
// a bunch of other code
코드를 다른 별도의 함수로 이동하는 것이지만, 다른 하나의 함수로 이동하는 것을 이해하지만이를 다른 수 있습니다.
에 대한 약속을 전달해야합니다 await
. Observable의 다음 이벤트를 promise로 변환하고 기다립니다.
if (condition) {
await observable.first().toPromise();
}
편집 참고 :이 답변은 원래 .take (1)을 사용했지만 .first ()를 사용했습니다 변경되어 값이 도착하기 전에 스트림이 끝나지 않는 경우 Promise가 해결되지 않는 문제를 방지합니다.
그건 그래야만 해
await observable.first().toPromise();
이전에 주석에서 언급했듯이 비어있는 완성 된 Observable이있을 때 take(1)
와 first()
연산자 사이에 상당한 차이 가 있습니다.
Observable.empty().first().toPromise()
EmptyError
그에 따라 처리 할 수있는 거부가 발생하며 일반적으로 바람직한 행동입니다.
그리고 Observable.empty().take(1).toPromise()
보류중인 약속을 초래할 것입니다. 이것은 동일합니다.
await
약속 이 필요 해요 toPromise()
. 참조 이 에, 대한 자세한 내용은 toPromise()
.
참고 URL : https://stackoverflow.com/questions/34190375/how-can-i-await-on-an-rx-observable
반응형
'IT' 카테고리의 다른 글
Angular UI 모달의 범위 문제 (0) | 2020.10.08 |
---|---|
assetic : dump와 assets : 설치의 차이점 (0) | 2020.10.08 |
{} 문을 사용하여 내부에서 반환을 호출하는 것이 좋은 방법입니까? (0) | 2020.10.08 |
Multiprocessing Queue, Pool 및 Locking을 사용하는 단순한 예 (0) | 2020.10.08 |
셀에서 복사 할 때 따옴표를 생략 (0) | 2020.10.08 |