rxjs combineLatest va Anguar2 nazorat qilinadigan massivlardagi farqni aniqlash

Mening ilovamdagi ayrim asosiy o'zgarishlarni aniqlash bilan ko'p kurashyapman. Men bunga bir necha kun bo'ldim va irodani yo'qotdim! Bu erda kimdir meni to'g'ri yo'nalishga ko'rsatishi mumkinmi degan savol tug'iladi.

guruh bilan 2 foydalanuvchi ro'yxatlarim bor. Ulardan biri a'zolari uchun , ikkinchisi esa moderators uchun.

Ushbu usul ma'lumotlar bazasiga ulanish uchun $ key qiymati bo'lgan ob'ektlar ro'yxatini olish uchun ulanish. Endi har bir foydalanuvchi uchun haqiqiy kodni olish uchun UserData </​​code> ni olish uchun ushbu kalitlardan foydalanmoqchiman. Men har bir narsani sinab ko'rdim va combineLatest ishlay olishim mumkin bo'lgan yagona narsa.

Shunday qilib, ikkala vazifani chaqiraman va shablonimdagi async trubasidan foydalanaman.

members$ = myService.getMemberListByType("blah", "members");
moderators$ = myService.getMemberListByType("blah", "moderators");

Mening vazifam bunga o'xshaydi.

  private getMemberListByType(groupKey: string, memberType: string) {

    return this.af.database.list(`groups/${groupKey}/${memberType}`)
      .switchMap(userListKeyMap => {

        console.log("UserListKeyMap", memberType, userListKeyMap);

        let usersObservables: Observable[] = [];
        userListKeyMap.forEach((object) => {
          usersObservables.push(this.af.database.object(`users/${object.$key}`)
            .map(UserData.fromJSON));
        });

        return Observable.combineLatest(usersObservables);
      });

  }

Biroq, burchak quyidagi ro'yxatdagi o'zgarishlarni aniqlay olmaydi. Boshqa bir usul boshqa bir usulda a'zo ni olib tashlab, uni moderatori ga qo'shib qo'ying. Bunday holda a'zolari ro'yxati foydalanuvchilarning bo'sh ro'yxatini [] yuboradi.

My * ngIf va * ngFor bu yangi bo'sh ob'ekt bilan o'zgarishlarni aniqlamaydi. Natija shundaki, foydalanuvchi (shabloni) endi 2 ro'yxatning bir qismidir, ammo buning ostida ma'lumotlar log tomonidan ta'kidlanganidek mukammaldir.

Men bo'sh bir qatorda birlashtirganda, bu mening muammom manbaidir. Hech narsa chiqa olmaydi .... shuning uchun qanday burchak o'zgarishi mumkin? Buni qanday hal qilishni bilmayman. Ushbu "bo'sh" foydalanish holatlarida kombinatning muqobiliga muqobil bormi? Men async trubasidan foydalanganim uchun menga mantiqiy bir narsa kerak.

Hech kim mening muammomni yoritishga qodirmi?

Rahmat!

yangilash

Muammo burchak2 bilan bevosita kuzatish mumkin bo'lgan ro'yxatni aniqlamaganligiga ishonchim komil. Ayniqsa, kuzatiladigan qator bir qiymatga ega bo'lsa, lekin keyinchalik bu qiymat bo'sh bo'ladi. Burchak2 bo'sh qatorni ko'rmaydi. Men bu muammoni hal qilishning hozircha hech qanday usuli yo'q. Yoki mening yondashuvim noto'g'ri yoki aniq kuzatuvlar ro'yxatini ro'yxatdan o'tkazish uchun qandaydir maxsus narsalar bo'lishi kerakmi?

screen of problem

  1. Blue = Komponentning yuklangan holati yaxshi, foydalanuvchi a'zo bo'lgan.
  2. Yashil = Foydalanuvchi a'zodan menejerga/moderatorga ko'chirildi.
  3. Qizil = Bu narsa yo'q, shuning uchun nima uchun u hali ko'rsatilmoqda?
5
Ushbu javob atrofida qarashni tavsiya qilamiz stackoverflow.com/questions/41584409/…
qo'shib qo'ydi muallif Aravind, manba
Siz jamoa sharhlovchisida mavjudsiz?
qo'shib qo'ydi muallif Aravind, manba
Siz jamoa sharhlovchisida mavjudsiz?
qo'shib qo'ydi muallif Aravind, manba
Siz jamoa sharhlovchisida mavjudsiz?
qo'shib qo'ydi muallif Aravind, manba
Ushbu javob atrofida qarashni tavsiya qilamiz stackoverflow.com/questions/41584409/…
qo'shib qo'ydi muallif Aravind, manba

8 javoblar

Oddiy vaqtinchalik echim bor:

  private getMemberListByType(groupKey: string, memberType: string) {

    return this.af.database.list(`groups/${groupKey}/${memberType}`)
      .switchMap(userListKeyMap => {

        console.log("UserListKeyMap", memberType, userListKeyMap);

        let usersObservables: Observable[] = [];
        userListKeyMap.forEach((object) => {
          usersObservables.push(this.af.database.object(`users/${object.$key}`)
            .map(UserData.fromJSON));
        });

        return usersObservables.length > 0 ? Observable.combineLatest(usersObservables) : Observable.of([]);
      });
 }
4
qo'shib qo'ydi
Rahmat! Ishlayotgan ko'rinadi! Ajablanadigan har bir kishi uchun combineLatest ([]) bo'sh qator bilan e'tiborga olinishi mumkin, lekin qiymatini hech qachon chiqarmaydi, (<)> kodi ([]) qiymatini chiqaradi. Bu shablonni aniqlashni o'zgartirish uchun kalit. Buni Kemskiy uchun minnatdorman.
qo'shib qo'ydi muallif Clark, manba
Bu ajoyib +1, rahmat!
qo'shib qo'ydi muallif dhndeveloper, manba

Oddiy vaqtinchalik echim bor:

  private getMemberListByType(groupKey: string, memberType: string) {

    return this.af.database.list(`groups/${groupKey}/${memberType}`)
      .switchMap(userListKeyMap => {

        console.log("UserListKeyMap", memberType, userListKeyMap);

        let usersObservables: Observable[] = [];
        userListKeyMap.forEach((object) => {
          usersObservables.push(this.af.database.object(`users/${object.$key}`)
            .map(UserData.fromJSON));
        });

        return usersObservables.length > 0 ? Observable.combineLatest(usersObservables) : Observable.of([]);
      });
 }
4
qo'shib qo'ydi
Rahmat! Ishlayotgan ko'rinadi! Ajablanadigan har bir kishi uchun combineLatest ([]) bo'sh qator bilan e'tiborga olinishi mumkin, lekin qiymatini hech qachon chiqarmaydi, (<)> kodi ([]) qiymatini chiqaradi. Bu shablonni aniqlashni o'zgartirish uchun kalit. Buni Kemskiy uchun minnatdorman.
qo'shib qo'ydi muallif Clark, manba
Bu ajoyib +1, rahmat!
qo'shib qo'ydi muallif dhndeveloper, manba

Sizning yondashuvingiz menga to'g'ri keladi. Bo'sh qator bilan combineLatest() dan foydalanish xatolik bilan tugamasligi kerak (masalan, forkJoin , bo'sh qatordan foydalanib, to'g'ri ishlatilgan holda). Keyin bo'sh qator tufayli bajarilsa ham switchMap dan foydalansangiz, bu menimcha o'ylamasligi kerak.

this.af.database.object faqat bir marta barcha elementlarni chiqaradi va keyin yoki uni ishga tushirganligini bilmayman, shuning uchun AngularFire2 bilan hech qanday tajriba yo'q har qanday o'zgarishdagi qiymatni chiqaradi (agar taxmin qilsam, ehtimol siz istagan narsadir).

Odatda combineLatest() yoki forkJoin() dan foydalangan holda juda keng tarqalgan muammo - manba kuzatishlar har doim kamida bitta elementni chiqarishga to'g'ri keladi. Boshqacha aytganda this.af.database.object dan hech biri bo'sh bo'lsa, unda combineLatest() hech narsa chiqarmaydi.

startWith() bilan hech bo'lmaganda bitta qiymatdan ishonch hosil qilishingiz mumkin. Masalan, quyidagi kabi:

userListKeyMap.forEach((object) => {
    usersObservables.push(this.af.database.object(`users/${object.$key}`)
        .startWith('{}')
        .map(UserData.fromJSON));
});

Agar bu narsa this.af.database.object or this.af.database.list instead of Observable.timer() dan foydalanmaslikka harakat qilmasa, kodi> burchakli2 unga obuna bo'lishini va yangi elementlar chiqarilganda ham unga obuna bo'lishini ta'minlash uchun.

4
qo'shib qo'ydi
Bu erda sharhlarimni qayta ko'rib chiqdim. Rahmat! Afsuski, sizning takliflaringizdan hech birini ishlashga muvaffaq bo'ldim va men buni .startWith dan foydalanishni xohlamayman. Shunga qaramay, o'qishni yaxshi ko'rganman! Bu shunchaki, u yerda hech narsa yo'q va shunga o'xshash narsalar keraksiz ko'rinardi.
qo'shib qo'ydi muallif Clark, manba

Sizning yondashuvingiz menga to'g'ri keladi. Bo'sh qator bilan combineLatest() dan foydalanish xatolik bilan tugamasligi kerak (masalan, forkJoin , bo'sh qatordan foydalanib, to'g'ri ishlatilgan holda). Keyin bo'sh qator tufayli bajarilsa ham switchMap dan foydalansangiz, bu menimcha o'ylamasligi kerak.

this.af.database.object faqat bir marta barcha elementlarni chiqaradi va keyin yoki uni ishga tushirganligini bilmayman, shuning uchun AngularFire2 bilan hech qanday tajriba yo'q har qanday o'zgarishdagi qiymatni chiqaradi (agar taxmin qilsam, ehtimol siz istagan narsadir).

Odatda combineLatest() yoki forkJoin() dan foydalangan holda juda keng tarqalgan muammo - manba kuzatishlar har doim kamida bitta elementni chiqarishga to'g'ri keladi. Boshqacha aytganda this.af.database.object dan hech biri bo'sh bo'lsa, unda combineLatest() hech narsa chiqarmaydi.

startWith() bilan hech bo'lmaganda bitta qiymatdan ishonch hosil qilishingiz mumkin. Masalan, quyidagi kabi:

userListKeyMap.forEach((object) => {
    usersObservables.push(this.af.database.object(`users/${object.$key}`)
        .startWith('{}')
        .map(UserData.fromJSON));
});

Agar bu narsa this.af.database.object or this.af.database.list instead of Observable.timer() dan foydalanmaslikka harakat qilmasa, kodi> burchakli2 unga obuna bo'lishini va yangi elementlar chiqarilganda ham unga obuna bo'lishini ta'minlash uchun.

4
qo'shib qo'ydi
Bu erda sharhlarimni qayta ko'rib chiqdim. Rahmat! Afsuski, sizning takliflaringizdan hech birini ishlashga muvaffaq bo'ldim va men buni .startWith dan foydalanishni xohlamayman. Shunga qaramay, o'qishni yaxshi ko'rganman! Bu shunchaki, u yerda hech narsa yo'q va shunga o'xshash narsalar keraksiz ko'rinardi.
qo'shib qo'ydi muallif Clark, manba

Siz shunga o'xshash biror narsani sinashingiz kerak:

private getMemberListByType(groupKey: string, memberType: string) {

  return this.af.database.list(`groups/${groupKey}/${memberType}`)

          //Force the source obs to complete to let .toArray() do its job.
           .take(1)

          //At this point, the obs emits a SINGLE array of ALL users.
           .do(userList => console.log(userList))

          //This "flattens" the array of users and emits each user individually.
           .mergeMap(val => val)

          //At this point, the obs emits ONE user at a time.
           .do(user => console.log(user))

          //Load the current user
           .mergeMap(user => this.af.database.object(`users/${user.$key}`))

          //At this point, the obs emits ONE loaded user at a time.
           .do(userData => console.log(userData))

          //Transform the raw user data into a User object.
           .map(userData => User.fromJSON(userData))

          //Store all user objects into a SINGLE, final array.
           .toArray();

}

Eslatma. do() bilan boshlangan chiziqlar faqatgina nima sodir bo'lishini tushuntirish uchun bu yerda. Ularni yakuniy kodda saqlashga hojat yo'q.

2
qo'shib qo'ydi
Siz xatolar deb nomlangan ikkita masala aslida to'g'ri. 1. kuzatiladigan [] to'g'ri. Bu Observable moslamalarni ( UserData </​​code> moslamalarni chiqaruvchi observables) bir qator degan ma'noni anglatadi. U combineLatest() ga o'tish uchun bir qatordan foydalanishni xohlaydi. 2 combineLatest() operatorida ham uning statik varianti mavjud. reactivex.io/rxjs/class/es6 sahifasining yuqori qismidagi statik usullarni ko'ring. /Observable.js~Observable.html
qo'shib qo'ydi muallif martin, manba
Bu to'g'ri. (1) obseningni bajarishga majbur qiladi. Oldingi izohimda aytganimdek, bu siz xohlagan narsa emas, lekin nima uchun toArray() ishlamayotganini tushunishga harakat qilardim. Chaqaloq qadamlar. :)
qo'shib qo'ydi muallif AngularChef, manba
@Clark. Ha, bu to'g'ri. Men nima bo'lganini angladim. Manba kuzatish mumkin bo'lgandan so'ng, toArray() ishining bajarilishiga juda aminman. Ammo Firebase-ning kuzatuvchilari bajarilmayapti, ular tinglaydilar. Zanjirning yuqori qismida .take (1) ni qo'shishga yordam beradimi? (yangilangan javobni ko'ring). Siz istagan narsa bo'lmasligi mumkin, ammo muammoni aniqlay oladigan bo'lsak, muqobillikni topish osonroq bo'ladi.
qo'shib qo'ydi muallif AngularChef, manba
Ajoyib. Men buni butunlay o'tkazib yubordim, Martinni aniqlab berganingiz uchun rahmat. Boshqa odamlarni chalg'itmaslik uchun javobni yangilayman.
qo'shib qo'ydi muallif AngularChef, manba
Juda g'alati. Agar siz konsolda jurnallarni ko'rsangiz, bu kuzatiladigan bajarilganligini anglatadi. To'g'ri usulga obuna bo'lganingizga aminmisiz? Sizning dastlabki kodingiz getMemberListByType() so'zini eslatdi va endi siz getGroupManagerList() deyapsiz.
qo'shib qo'ydi muallif AngularChef, manba
Sizga katta rahmat! Men o'zimning qo'pol muammoning muammoning negizida bo'lishi kerakligini bilar edim. Rxjs docs emas, balki faqat shunday tushuntirilgan darsliklarni yaxshi ko'raman. Men hozirda yashayotgan yagona muammo - bu javobni qabul qila olmayman. Men o'zingizning izlovchilaringizning so'zlarini ko'rayapman, lekin odatdagidek this.groupService.getGroupManagerList (groupKey) .subscribe (su & zwnj; ccess => console.log (muvaffaqiyat)) ishlamaydi (yoki xato) g'alati.
qo'shib qo'ydi muallif Clark, manba
Oh shoshqaloqlik uchun afsus! Men bu usulga bevosita kirish qilmayman, lekin uni qaytarish uchun boshqa usullar mavjud, shuning uchun simlar turlarini yashirishim mumkin. Asosan bir xil narsa. async trubasi unga qanday javob berishi va yuqorida obuna bo'lishimning o'zi etarli emas. Bu xato emas, yoki men obuna bo'lganimda aniqlanmagan bo'lsa, ortiqcha bajarganingizni ko'rmoqchiman. do's Nima uchun hozir men buni hech qachon ko'rmaganligimni tekshirib ko'raman.
qo'shib qo'ydi muallif Clark, manba
Rahmat! Keyin uni sinab ko'raman. Menga tegishli bo'lgan yagona narsa - take (1) dan foydalanib, "birini oling, keyin esa obunani bekor qiling". Biroq, bu erda emas. Agar buni qilsam, kuzatiladigan kishi o'lib qoladi. Shuning uchun agar siz ushbu ro'yxatga qarashni xohlasangiz va a'zo real vaqtda guruhga qo'shilsa yoki boshqa administrator tomonidan a'zolar moderator bo'lib qolsa ... Bu yangiliklarning hech qaysi biri yonmaydi? Boshqacha aytganda ... bu hech qachon tugamaydi va toArray bo'lishi ehtimoldan yiroq emas
qo'shib qo'ydi muallif Clark, manba
oxirgi savol. Uslubingiz ostidagi toArray() dan keyin .do ni qo'shdim. .do (x => console.log (x)) va men bu qadamni ham ko'rmayapman. import "rxjs/add/operator/toArray ' to'g'ri importni oladimi?
qo'shib qo'ydi muallif Clark, manba

Siz shunga o'xshash biror narsani sinashingiz kerak:

private getMemberListByType(groupKey: string, memberType: string) {

  return this.af.database.list(`groups/${groupKey}/${memberType}`)

          //Force the source obs to complete to let .toArray() do its job.
           .take(1)

          //At this point, the obs emits a SINGLE array of ALL users.
           .do(userList => console.log(userList))

          //This "flattens" the array of users and emits each user individually.
           .mergeMap(val => val)

          //At this point, the obs emits ONE user at a time.
           .do(user => console.log(user))

          //Load the current user
           .mergeMap(user => this.af.database.object(`users/${user.$key}`))

          //At this point, the obs emits ONE loaded user at a time.
           .do(userData => console.log(userData))

          //Transform the raw user data into a User object.
           .map(userData => User.fromJSON(userData))

          //Store all user objects into a SINGLE, final array.
           .toArray();

}

Eslatma. do() bilan boshlangan chiziqlar faqatgina nima sodir bo'lishini tushuntirish uchun bu yerda. Ularni yakuniy kodda saqlashga hojat yo'q.

2
qo'shib qo'ydi
Siz xatolar deb nomlangan ikkita masala aslida to'g'ri. 1. kuzatiladigan [] to'g'ri. Bu Observable moslamalarni ( UserData </​​code> moslamalarni chiqaruvchi observables) bir qator degan ma'noni anglatadi. U combineLatest() ga o'tish uchun bir qatordan foydalanishni xohlaydi. 2 combineLatest() operatorida ham uning statik varianti mavjud. reactivex.io/rxjs/class/es6 sahifasining yuqori qismidagi statik usullarni ko'ring. /Observable.js~Observable.html
qo'shib qo'ydi muallif martin, manba
Juda g'alati. Agar siz konsolda jurnallarni ko'rsangiz, bu kuzatiladigan bajarilganligini anglatadi. To'g'ri usulga obuna bo'lganingizga aminmisiz? Sizning dastlabki kodingiz getMemberListByType() so'zini eslatdi va endi siz getGroupManagerList() deyapsiz.
qo'shib qo'ydi muallif AngularChef, manba
Bu to'g'ri. (1) obseningni bajarishga majbur qiladi. Oldingi izohimda aytganimdek, bu siz xohlagan narsa emas, lekin nima uchun toArray() ishlamayotganini tushunishga harakat qilardim. Chaqaloq qadamlar. :)
qo'shib qo'ydi muallif AngularChef, manba
@Clark. Ha, bu to'g'ri. Men nima bo'lganini angladim. Manba kuzatish mumkin bo'lgandan so'ng, toArray() ishining bajarilishiga juda aminman. Ammo Firebase-ning kuzatuvchilari bajarilmayapti, ular tinglaydilar. Zanjirning yuqori qismida .take (1) ni qo'shishga yordam beradimi? (yangilangan javobni ko'ring). Siz istagan narsa bo'lmasligi mumkin, ammo muammoni aniqlay oladigan bo'lsak, muqobillikni topish osonroq bo'ladi.
qo'shib qo'ydi muallif AngularChef, manba
Ajoyib. Men buni butunlay o'tkazib yubordim, Martinni aniqlab berganingiz uchun rahmat. Boshqa odamlarni chalg'itmaslik uchun javobni yangilayman.
qo'shib qo'ydi muallif AngularChef, manba
Rahmat! Keyin uni sinab ko'raman. Menga tegishli bo'lgan yagona narsa - take (1) dan foydalanib, "birini oling, keyin esa obunani bekor qiling". Biroq, bu erda emas. Agar buni qilsam, kuzatiladigan kishi o'lib qoladi. Shuning uchun agar siz ushbu ro'yxatga qarashni xohlasangiz va a'zo real vaqtda guruhga qo'shilsa yoki boshqa administrator tomonidan a'zolar moderator bo'lib qolsa ... Bu yangiliklarning hech qaysi biri yonmaydi? Boshqacha aytganda ... bu hech qachon tugamaydi va toArray bo'lishi ehtimoldan yiroq emas
qo'shib qo'ydi muallif Clark, manba
Oh shoshqaloqlik uchun afsus! Men bu usulga bevosita kirish qilmayman, lekin uni qaytarish uchun boshqa usullar mavjud, shuning uchun simlar turlarini yashirishim mumkin. Asosan bir xil narsa. async trubasi unga qanday javob berishi va yuqorida obuna bo'lishimning o'zi etarli emas. Bu xato emas, yoki men obuna bo'lganimda aniqlanmagan bo'lsa, ortiqcha bajarganingizni ko'rmoqchiman. do's Nima uchun hozir men buni hech qachon ko'rmaganligimni tekshirib ko'raman.
qo'shib qo'ydi muallif Clark, manba
oxirgi savol. Uslubingiz ostidagi toArray() dan keyin .do ni qo'shdim. .do (x => console.log (x)) va men bu qadamni ham ko'rmayapman. import "rxjs/add/operator/toArray ' to'g'ri importni oladimi?
qo'shib qo'ydi muallif Clark, manba
Sizga katta rahmat! Men o'zimning qo'pol muammoning muammoning negizida bo'lishi kerakligini bilar edim. Rxjs docs emas, balki faqat shunday tushuntirilgan darsliklarni yaxshi ko'raman. Men hozirda yashayotgan yagona muammo - bu javobni qabul qila olmayman. Men o'zingizning izlovchilaringizning so'zlarini ko'rayapman, lekin odatdagidek this.groupService.getGroupManagerList (groupKey) .subscribe (su & zwnj; ccess => console.log (muvaffaqiyat)) ishlamaydi (yoki xato) g'alati.
qo'shib qo'ydi muallif Clark, manba

Siz shunga o'xshash biror narsani sinashingiz kerak:

private getMemberListByType(groupKey: string, memberType: string) {

  return this.af.database.list(`groups/${groupKey}/${memberType}`)

          //Force the source obs to complete to let .toArray() do its job.
           .take(1)

          //At this point, the obs emits a SINGLE array of ALL users.
           .do(userList => console.log(userList))

          //This "flattens" the array of users and emits each user individually.
           .mergeMap(val => val)

          //At this point, the obs emits ONE user at a time.
           .do(user => console.log(user))

          //Load the current user
           .mergeMap(user => this.af.database.object(`users/${user.$key}`))

          //At this point, the obs emits ONE loaded user at a time.
           .do(userData => console.log(userData))

          //Transform the raw user data into a User object.
           .map(userData => User.fromJSON(userData))

          //Store all user objects into a SINGLE, final array.
           .toArray();

}

Eslatma. do() bilan boshlangan chiziqlar faqatgina nima sodir bo'lishini tushuntirish uchun bu yerda. Ularni yakuniy kodda saqlashga hojat yo'q.

2
qo'shib qo'ydi
Siz xatolar deb nomlangan ikkita masala aslida to'g'ri. 1. kuzatiladigan [] to'g'ri. Bu Observable moslamalarni ( UserData </​​code> moslamalarni chiqaruvchi observables) bir qator degan ma'noni anglatadi. U combineLatest() ga o'tish uchun bir qatordan foydalanishni xohlaydi. 2 combineLatest() operatorida ham uning statik varianti mavjud. reactivex.io/rxjs/class/es6 sahifasining yuqori qismidagi statik usullarni ko'ring. /Observable.js~Observable.html
qo'shib qo'ydi muallif martin, manba
Bu to'g'ri. (1) obseningni bajarishga majbur qiladi. Oldingi izohimda aytganimdek, bu siz xohlagan narsa emas, lekin nima uchun toArray() ishlamayotganini tushunishga harakat qilardim. Chaqaloq qadamlar. :)
qo'shib qo'ydi muallif AngularChef, manba
@Clark. Ha, bu to'g'ri. Men nima bo'lganini angladim. Manba kuzatish mumkin bo'lgandan so'ng, toArray() ishining bajarilishiga juda aminman. Ammo Firebase-ning kuzatuvchilari bajarilmayapti, ular tinglaydilar. Zanjirning yuqori qismida .take (1) ni qo'shishga yordam beradimi? (yangilangan javobni ko'ring). Siz istagan narsa bo'lmasligi mumkin, ammo muammoni aniqlay oladigan bo'lsak, muqobillikni topish osonroq bo'ladi.
qo'shib qo'ydi muallif AngularChef, manba
Ajoyib. Men buni butunlay o'tkazib yubordim, Martinni aniqlab berganingiz uchun rahmat. Boshqa odamlarni chalg'itmaslik uchun javobni yangilayman.
qo'shib qo'ydi muallif AngularChef, manba
Juda g'alati. Agar siz konsolda jurnallarni ko'rsangiz, bu kuzatiladigan bajarilganligini anglatadi. To'g'ri usulga obuna bo'lganingizga aminmisiz? Sizning dastlabki kodingiz getMemberListByType() so'zini eslatdi va endi siz getGroupManagerList() deyapsiz.
qo'shib qo'ydi muallif AngularChef, manba
Rahmat! Keyin uni sinab ko'raman. Menga tegishli bo'lgan yagona narsa - take (1) dan foydalanib, "birini oling, keyin esa obunani bekor qiling". Biroq, bu erda emas. Agar buni qilsam, kuzatiladigan kishi o'lib qoladi. Shuning uchun agar siz ushbu ro'yxatga qarashni xohlasangiz va a'zo real vaqtda guruhga qo'shilsa yoki boshqa administrator tomonidan a'zolar moderator bo'lib qolsa ... Bu yangiliklarning hech qaysi biri yonmaydi? Boshqacha aytganda ... bu hech qachon tugamaydi va toArray bo'lishi ehtimoldan yiroq emas
qo'shib qo'ydi muallif Clark, manba
Oh shoshqaloqlik uchun afsus! Men bu usulga bevosita kirish qilmayman, lekin uni qaytarish uchun boshqa usullar mavjud, shuning uchun simlar turlarini yashirishim mumkin. Asosan bir xil narsa. async trubasi unga qanday javob berishi va yuqorida obuna bo'lishimning o'zi etarli emas. Bu xato emas, yoki men obuna bo'lganimda aniqlanmagan bo'lsa, ortiqcha bajarganingizni ko'rmoqchiman. do's Nima uchun hozir men buni hech qachon ko'rmaganligimni tekshirib ko'raman.
qo'shib qo'ydi muallif Clark, manba
oxirgi savol. Uslubingiz ostidagi toArray() dan keyin .do ni qo'shdim. .do (x => console.log (x)) va men bu qadamni ham ko'rmayapman. import "rxjs/add/operator/toArray ' to'g'ri importni oladimi?
qo'shib qo'ydi muallif Clark, manba
Sizga katta rahmat! Men o'zimning qo'pol muammoning muammoning negizida bo'lishi kerakligini bilar edim. Rxjs docs emas, balki faqat shunday tushuntirilgan darsliklarni yaxshi ko'raman. Men hozirda yashayotgan yagona muammo - bu javobni qabul qila olmayman. Men o'zingizning izlovchilaringizning so'zlarini ko'rayapman, lekin odatdagidek this.groupService.getGroupManagerList (groupKey) .subscribe (su & zwnj; ccess => console.log (muvaffaqiyat)) ishlamaydi (yoki xato) g'alati.
qo'shib qo'ydi muallif Clark, manba

Ko'rsatiladiganlar ro'yxatida forkJoin dan foydalaning

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

let userListKeyMap$ = Rx.Observable.of([{key:1}, {key:2}, {key:3}]); //mock keys
let requestUserFromKey = (key) => Rx.Observable.of({user: key}).delay(1000); //mock users

let result$ = userListKeyMap$.switchMap((userKeys) => 
 Rx.Observable.forkJoin(userKeys.map(uk => requestUserFromKey(uk.key))));

result$.subscribe((users) => console.log('got some users: ', users));
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>
</div> </div>
1
qo'shib qo'ydi
Hey Corolla rahmat! Men buni bir xil sharoitda massaj qilish imkoniyatiga ega bo'ldim, ammo men kuzatiladigan yaratilish muammosi deb o'ylamayman. Hatto taklifingiz bilan Angular2 bo'sh qatorni aniqlay olmaydi. (Yuqoridagi savolda Skrinshotni ko'ring).
qo'shib qo'ydi muallif Clark, manba
Angular Uzbekistan
Angular Uzbekistan
107 ishtirokchilar

Guruh Angular bo'yicha muloqot qilish uchun ochilgan Sizni qiziqtirsa: @nodejs_uz @react_uz @angular_uz @yiiframework_uz @js_uzb @typescript_uzb @vuejs_uz @ngTashkent @laravel_uz @uzdevgroup Ish o'rinlari @UzDev_jobs

ngTashkent
ngTashkent
77 ishtirokchilar

Правила просты: 1. Не хамить 2. Не хейтить 3. Реакт не нужен Ссылки: https://t.me/angular_ru - старший брат https://t.me/angular_uz - ангулар на узбекском @js_uzb @vuejs_uz @react_uz @nodejs_uz @yiiframework_uz @uzdevgroup @UzDev_Jobs @tasdev_talks