이전 AJAX 통화 요청이 해결될 때까지 RxJs를 사용하여 모든 요청을 보류하는 방법
나는 어떤 외부 요소에 의해 촉발된 행동을 나타내는 관찰력이 있다.이 질문의 목적상, 라고 하자.createBananaAction
. 나는 a를 가지고 있다.bananaService
방법대로create
AJAX 요청을 수행하고 생성된 바나나를Promise
.
그래서, 어떤 데이터가 도착할때마다createBananaAction
, 우리는 전화하기를 원한다.bananaService.create()
.
코드는 다음과 같다: (RxJs 사용)
this.createdBananas = createBananaAction.flatMap(() => bananaService.create());
이제 기존 바나나를 받은 뒤에야 다른 바나나를 요청할 수 있도록 createBananaAction을 '스스로틀'하는 것이 과제다.간단히 말해서, 두 번의 동시 통화는 절대 있을 수 없다.bananaService.create()
나는 제때에 조절하고 싶지 않지만 바나나 서비스가 그것의 일을 하는 동안 새로운 바나나를 위한 모든 들어오는 요청은 무시하기를 원한다는 것에 주목하라.
내가 조사를 좀 해봤더니 겉보기에는 적절해 보이는 교환원을 찾아냈다.
내 코드는 이렇게 생겼어:
const pausableCreateBananaAction = createBananaAction.pausable();
this.createdBananas = pausableCreateBananaAction
.do(() => pausableCreateBananaAction.pause())
.flatMap(() => bananaService.create())
.do(() => pausableCreateBananaAction.resume());
이게 효과가 있는 것 같은데, 이게 필요한 게 마음에 안 들어.do
수동으로 트리거할 명령문pause
그리고resume
진술들
나는 네가 관찰할 수 있는 것을 알아냈다.pausable
그럼 생산해야 할 것false
또는true
적절한 시기에, 그러나 이것은 또한 내가 주제에서 수동으로 값을 푸시해야 한다.이와 비슷한 것:
const letItGoThrough = new Rx.Subject();
this.createdBananas = createBananaAction
.pausable(letItGoThrough.startWith(true))
.do(() => letItGoThrough.onNext(false))
.flatMap(() => bananaService.create())
.do(() => letItGoThrough.onNext(true));
그래서 지금 나는 Rx를 가지고 있다.제목(대상은 RxJs의 교육용 바퀴와 같으며, RxJs에서 충분히 경험을 쌓을 때까지 사용하는 것으로 더 이상 필요하지 않다.)과 두 번의 통화로 다음 작업을 수행하십시오.do
.
내가 원하는 것을 할 수 있는 완전한 "적극적" 방법이 있는가?아니면 내가 내 취향에 너무 절실해 보이고 느끼는 이 구조를 고수하고 있는 것일까.
미리 고맙다.
대신 flatMapFirst를 사용하십시오.flatMap
:
this.createdBananas = createBananaAction.flatMapFirst(() => bananaService.create());
위와 같은 가정은 다음과 같다.bananaService.create()
감기가 재발하다만약 그것이 관찰할 수 있는 뜨거운 것을 되돌려준다면Promise
그럼 통화를 마무리짓고Observable.defer
그것을 관찰할 수 있는 차가운 것으로 바꾸다flatMapFirst
발사를 적절하게 제어할 수 있다.
this.createdBananas = createBananaAction
.flatMapFirst(() => Rx.Observable.defer(() => bananaService.create()));
'Programing' 카테고리의 다른 글
전자 프로젝트를 최신 버전으로 업데이트한 후 "전자 보안 경고"가 표시되는 이유 (0) | 2022.03.17 |
---|---|
react useContext 를 사용하여 컨텍스트의 데이터를 동일한 구성 요소에서 표시하는 방법 (0) | 2022.03.17 |
Nuxt의 Vuex-module-decorator 구문으로 정의된 Vuex 모듈을 vue-test-utils 및 Jest를 사용하여 테스트하는 방법 (0) | 2022.03.17 |
라우터에서 매개 변수를 사용하는 동안 오류 발생.푸시 함수 vue-property 4 (0) | 2022.03.17 |
rxjs 관측 가능성과 일반 반응 구성요소를 통합하려면 어떻게 해야 하는가? (0) | 2022.03.17 |