IT

Rx Observable에서 어떻게 ʻawait` 할 수 있습니까?

lottoking 2020. 10. 8. 07:28
반응형

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

반응형