관찰 가능한 것을 기다릴 수 있기를 바랍니다.
const source = Rx.Observable.create(/* ... */)
//...
await source;
순진한 시도는 await가 즉시 해결되고 실행을 차단하지 않습니다.
편집 : 내 전체 사용 사례의 의사 코드는 다음과 같습니다.
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()
있는 해결책이 될 것 undefined
입니다.
답변
await
약속 이 필요 하므로 toPromise()
. 참조 이 에 대한 자세한 내용은 toPromise()
.
답변
toPromise
이 더 이상 사용되지 않는 경우 사용할 수 .pipe(take(1)).toPromise
있지만 여기에서 볼 수 있듯이 더 이상 사용되지 않습니다.
따라서 다음 toPromise
과 같이 (RxJs 6)을 사용하십시오 .
//return basic observable
const sample = val => Rx.Observable.of(val).delay(5000);
//convert basic observable to promise
const example = sample('First Example')
.toPromise()
//output: 'First Example'
.then(result => {
console.log('From Promise:', result);
});
async / await 예 :
//return basic observable
const sample = val => Rx.Observable.of(val).delay(5000);
//convert basic observable to promise
const example = await sample('First Example').toPromise()
// output: 'First Example'
console.log('From Promise:', result);
여기에서 자세한 내용을 읽어보십시오 .
그리고이 잘못된 주장을 삭제하십시오 toPromise
.