약속.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
'programing' 카테고리의 다른 글
개체를 JSON으로 변환하고 PHP에서 JSON을 개체로 변환(Java의 경우 Gson과 같은 라이브러리) (0) | 2023.03.21 |
---|---|
AngularJS: 컨트롤러를 완전히 새로고침하지 않고 해시 및 라우팅 변경 (0) | 2023.03.21 |
긴 숫자에 의한 JSON 언마셜링에 부동소수점 번호가 부여됩니다. (0) | 2023.03.21 |
스프링 부트 시 디버깅로그 메시지를 끄는 방법 (0) | 2023.03.21 |
wordpress의 관리 사이드바에서 게시물을 제거하는 방법 (0) | 2023.03.21 |