मेरे पास एक एनजीआरएक्स स्टोर चयनकर्ता है:

export const selectActivePracticeUsersListSnapshot = pipe(
  select(selectPracticeUsersList),
  filter((users) => !!users),
  take(1),
  map((users) => users.filter((user) => user.active))
);

मेरे पास एक ऐसी सेवा है जिसे कई घटकों में इंजेक्शन दिया गया है जिसमें निम्न विधि शामिल है:

public getTeamMembersWithAccess(permission: string): string[] {
  let flagAvatars: string[];
  this.store.dispatch(loadUsers());
  this.store.pipe(selectActivePracticeUsersListSnapshot).subscribe((activePracticeUsers) => {
    flagAvatars = activePracticeUsers.reduce((teamMembers, activeUser) => {
      if (!!activeUser.permissions[permission]) {
        const { firstName, lastName } = activeUser;
        return [...teamMembers, `${firstName} ${lastName}`];
      }
      return teamMembers;
    }, []);
  });
  return flagAvatars;
}

मैं इसे अपने घटक से इस प्रकार कहता हूं:

constructor(private helperService: HelperService) {
  const flagAvatars = this.helperService.getTeamMembersWithAccess('AdminPage');
}

मेरी समस्या यह है कि स्टोर चयनकर्ता की सदस्यता से पहले flagAvatars: string[]; की वजह से सेवा विधि अपरिभाषित हो जाती है क्योंकि यह loadUsers() पूरा करने के लिए। मुझे पता है कि मुझे getTeamMembersWithAccess() किसी भी तरह से ऑब्जर्वेबल को वापस करने के लिए विधि को बदलने की आवश्यकता है, लेकिन मुझे यकीन नहीं है कि इसे कैसे लिखा जाए। मैंने कई चीजों की कोशिश की है लेकिन इसे ठीक नहीं कर सकता। मुझे यकीन है कि मुझे सदस्यता के बजाय मानचित्र का उपयोग करने की ज़रूरत है, लेकिन यह नहीं पता कि इसे कैसे लिखना है।

0
mycroft16 8 अक्टूबर 2020, 01:32

1 उत्तर

सबसे बढ़िया उत्तर

आप अपने कथन के साथ बिल्कुल सही हैं, मैं इसे ठोस बनाने में आपकी सहायता करूंगा।

ये कोशिश करें:

सेवा:

import { map } from 'rxjs/operators';
......
public getTeamMembersWithAccess(permission: string): Observable<string[]> {
  this.store.dispatch(loadUsers());
  this.store.pipe(selectActivePracticeUsersListSnapshot).pipe(
   map((activePracticeUsers) => {
    // flagAvatars equals this, so let's just return it right away in the map
    return activePracticeUsers.reduce((teamMembers, activeUser) => {
      if (!!activeUser.permissions[permission]) {
        const { firstName, lastName } = activeUser;
        return [...teamMembers, `${firstName} ${lastName}`];
      }
      return teamMembers;
    }, []);
   });
  )
}

इसका सेवन करने के लिए:

this.helperService.getTeamMembersWithAccess('AdminPage').subscribe(data => {
  console.log(data);
});
1
AliF50 8 अक्टूबर 2020, 02:48