Assign value to parameter inside subscribe method

 avatar
unknown
typescript
2 years ago
2.2 kB
14
Indexable
// Method execution inside Component

export class MyComponent implements OnInit {
    
    moneyData!:any // This is the parameter I want to assign my value !
    
    constructor(
        private myService: MyService) {}
    
    async ngOnInit() {
        await this.myService.getTasksByCategory(this.moneyData, 'money') // 'money' is the category name I want to query with)
        await console.log(this.money Data); // NOT WORKING!
    }
    
}

// My Service method which has parameter 'dataConsumer' 

export class MyService {
    
getTasksByCategory(dataConsumer:any, category:string) {
    const daysFromThisWeek = this.getDaysFromThisWeek();
    this.goalsService.goalsCollection()
    .pipe(
      map((goalsArr:any) => {
        goalsArr = goalsArr.filter((item:any) => item.category === category);
        return goalsArr;
      }),
      map((goalsArr:any) => {
        const goalsIDs = goalsArr.map((item:any) => item.id);
        return goalsIDs;
      })
    )
    .subscribe((goalsIDs:any) => {
      this.tasksService.tasksCollection()
        .pipe(
          // get category-matching-tasks
          map((tasksArr:any) => {
            let modArr = [] as any;
            goalsIDs.forEach((goalId:any) => {
              const forModArr = tasksArr.filter((task:any) => task.goal_id === goalId);
              modArr = modArr.concat(forModArr);
          })
          return modArr;
        }),
        map(tasksArr => {
          // get number of category-matching-tasks on each week day
          let finalTasks = [] as any;
          daysFromThisWeek.forEach((day:any) => {
              const forFinalTasks = tasksArr.filter((task:any) => task.taskDate === day);
              finalTasks = finalTasks.concat(forFinalTasks.length);
          })
          return finalTasks;
        })
        )
        // .subscribe(d => {
        //   res = d;
        // })
        .subscribe(async (finalTasks: Promise<any>[]) => {
          const completedTasks = await Promise.all(finalTasks);
          dataConsumer = completedTasks;
          // przypisz wartość do zmiennej wewnątrz subskrypcji
          }
        )
      }) // Subscribe
  }
  
}
Editor is loading...