programing

약속.RxJs Observatible을 사용한 모든 동작?

newsource 2023. 3. 21. 22:13

약속.RxJs Observatible을 사용한 모든 동작?

Angular 1.x에서는 때때로 여러 개를 만들 필요가 있습니다.http모든 응답에 대해 요청하고 조치를 취합니다.나는 모든 약속을 배열로 던지고 전화를 할 것이다.Promise.all(promises).then(function (results) {...}).

Angular 2의 베스트 프랙티스는 RxJ의 사용을 나타내고 있는 것 같습니다.Observable에서의 약속 대신http요청한다.http 요청에서 생성된 두 개 이상의 다른 Observatibles가 있는 경우 다음과 같은 항목이 있습니까?Promise.all()?

에뮬레이션을 위한 보다 간단한 대안Promise.all를 사용하는 것입니다.forkJoin연산자(모든 관측 가능 요소를 병렬로 시작하고 마지막 요소를 결합):

좀 범위를 벗어나긴 하지만 만약 도움이 된다면, 약속을 채우는 것에 관해선 간단한 방법을 쓰면 돼.flatMap: Cf. RxJs 약속 구성(데이터 통과)

RxJs v6를 사용하여 2019년 5월 업데이트

다른 답변이 유용하다는 것을 알게 되었고, 아르노에 의해 제시된 답변의 예를 제시하고자 합니다.zip사용.

여기 이 두 가지 사이의 동등성을 보여주는 단편들이 있다.Promise.all및 rxjszip(또한 rxjs6에서는 zip을 연산자가 아닌 "supjs"를 사용하여 Import하는 방법에 대해서도 설명합니다).

import { zip } from "rxjs";

const the_weather = new Promise(resolve => {
  setTimeout(() => {
    resolve({ temp: 29, conditions: "Sunny with Clouds" });
  }, 2000);
});

const the_tweets = new Promise(resolve => {
  setTimeout(() => {
    resolve(["I like cake", "BBQ is good too!"]);
  }, 500);
});

// Using RxJs
let source$ = zip(the_weather, the_tweets);
source$.subscribe(([weatherInfo, tweetInfo]) =>
  console.log(weatherInfo, tweetInfo)
);

// Using ES6 Promises
Promise.all([the_weather, the_tweets]).then(responses => {
  const [weatherInfo, tweetInfo] = responses;
  console.log(weatherInfo, tweetInfo);
});

양쪽의 출력은 동일합니다.상기의 실행으로 얻을 수 있는 것은, 다음과 같습니다.

{ temp: 29, conditions: 'Sunny with Clouds' } [ 'I like cake', 'BBQ is good too!' ]
{ temp: 29, conditions: 'Sunny with Clouds' } [ 'I like cake', 'BBQ is good too!' ]

fork Join도 잘 작동하지만, 관측 가능한 마지막 값을 가져가는 것에 대해 걱정할 필요가 없기 때문에 combine Latest를 선호합니다.이렇게 하면 이들 중 하나라도 새 값을 내보낼 때마다 업데이트를 받을 수 있습니다(예: 간격에 따라 가져오기).

reactivex.io의 forkJoin은 실제로 Zip을 가리키고 있습니다.그것은 저에게 도움이 되었습니다.

let subscription = Observable.zip(obs1, obs2, ...).subscribe(...);

언급URL : https://stackoverflow.com/questions/35608025/promise-all-behavior-with-rxjs-observables