Անկյունային RXJS օպերատորները՝ mergeMapև forkJoinշատ օգտակար են, երբ ցանկանում եք կատարել առաջադրանքներ զուգահեռաբար:
RXJS օպերատորները՝ mergeMapև forkJoin շատ օգտակար են, երբ ցանկանում եք կատարել առաջադրանքներ զուգահեռաբար, այսինքն՝ այստեղ կարևոր է միայն արդյունք ստանալը, իսկ առաջադրանքների կատարման կարգը իրականում չէ: այստեղ կարևոր է:
Դիտարկենք այս սցենարը.
- Ես զուգահեռաբար վերցնում եմ 5 օգտվողների տվյալներ՝ A, B, C, D և E՝ օգտագործելով mergeMapօպերատորը: Յուրաքանչյուր օգտատիրոջ տվյալները ստանալու համար արված API զանգը կհամապատասխանի ներքին դիտարկելի բաժանորդագրությանը:
- Ենթադրենք, 3 օգտատեր B, C և D գոյություն չունեն: Այսպիսով, այս 3 օգտատերերին համապատասխանող API-ի կանչերը կձախողվեն HTTP 404-ով: Սա նշանակում է, որ 3 դիտելիները կսխալվեն, իսկ API-ի զանգերը, որոնք համապատասխանում են մյուս 2 օգտվողներին A և E, որոնք կարող են հնարավորություն ունենալ: հաջողությունը նույնպես կվերանա, եթե դրանք դեռ ընթացքի մեջ են:
- Ես չեմ ուզում կորցնել մնացած 2 օգտատերերի տվյալները՝ A և D միայն այն պատճառով, որ API-ի 3 օգտվողների համար B, C և D զանգերը ձախողվել են:
- Ես կցանկանայի նաև ցուցադրել 3 օգտվողների հետ կապված սխալները B, C և D:
Ստորև ներկայացված է սքրինշոթը, թե ինչի եմ ուզում հասնել: Դա փոքր անկյունային հավելված է: Ես փորձել եմ վերցնել 5 օգտատերերի տվյալներ, որոնցից 3-ը գոյություն չունի։ Բայց ես չեմ կորցրել մյուս 2 օգտվողների տվյալները:
Մենք ցուցադրել ենք 3 օգտվողներին համապատասխանող սխալի հաղորդագրությունները, ինչպես նաև ցուցադրել ենք այն օգտատերերի ID-ն ու անունը, որոնց տվյալները կարողացանք առբերել:
Բաղադրիչի ձևանմուշ.Սա հենց այն է, ինչ մենք տեսնում ենք սքրինշոթում:
Fetch Users Dataկոճակը կկանչի task1(),որտեղ մենք փորձում ենք առբերել 5 օգտվողների տվյալները:
Մենք բաժանորդագրվել ենք 2 դիտելի errorObservable$ և task1$՝ համապատասխանաբար ցուցադրելու սխալները և օգտվողի տվյալները:
Բաղադրիչի դաս.
public list = [50, 1, 60, 9, 30];
Ցանկի զանգվածը պարունակում է օգտատերերի ID-ների զանգված, որոնց տվյալները մենք ցանկանում ենք վերցնել: Գոյություն չունեցող օգտվողները ID-ներով են 50, 60 և 30:
Անցում դեպի task1():
- Մենք վերածել ենք զանգվածի ցուցակը սառը դիտարկելիի՝ օգտագործելով օպերատորից:
- mergeMapօպերատորը կնշի սառը դիտելիությունից արտանետված օգտվողի ID-ն ներքին դիտելիության մեջ, որը վերադարձվում է getUser()-ի կողմից Տվյալների ծառայություն:
getUser()-ը կանչում է API՝ օգտվողի ID-ին համապատասխան տվյալները ստանալու համար:
getUser(id: number): Observable<any> { return this.http .get(`https://jsonplaceholder.typicode.com/users/${id}`) .pipe(catchError((err) => throwError(err))); }
3. Եթե API-ի զանգը հաջողված է, ապա քարտեզի օպերատորի ներսում մենք օգտատիրոջ տվյալները տեղափոխում ենք տեղական փոփոխական userData: Սա հասանելի տվյալներն են, երբ մենք բաժանորդագրվում ենք կաղապարի task1$ դիտարկելի-ին:
map((result) => { userData.push(result); return userData; }),
4. Եթե API-ի զանգը ձախողվի, ապա catchError օպերատորի ներսում մենք սկզբում սեղմում ենք սխալի օբյեկտը տեղական փոփոխական errorListայնուհետև փոխանցում errorList: error$ առարկային: Մենք բաժանորդագրվում ենք այս թեմային կաղապարում՝ սխալները ցուցադրելու համար:
catchError((err) => { errorList.push(err); this.error$.next(errorList); return EMPTY; })
Ամբողջ աշխատանքային օրինակը կարելի է գտնել ստորև.
Եթե կարծում եք, որ task1()-ում տեղական փոփոխականների օգտագործումը userDataև errorList իսկապես ավելորդ է, և կարող են լինել միացման ավելի լավ եղանակներ: օգտագործողի տվյալները կամ սխալի տվյալները զանգվածի մեջ, ապա ստուգեք ստորև բերված օրինակը: Այստեղ մենք օգտագործել ենք RXJS սկանավորման օպերատորը, որպեսզի հասնենք օգտվողի /սխալի օբյեկտների միացմանը զանգվածի մեջ:
Ավելի շատ բովանդակություն PlainEnglish.io կայքում: Գրանցվեք մեր անվճար շաբաթական տեղեկագրին: Հետևեք մեզ Twitter, LinkedIn, YouTube և Discord-ում: . Հետաքրքրվա՞ծ եք Growth Hacking-ով: Դիտեք Circuit: