मेरे पास दो संबंधित क्रियाएं हैं जिन्हें एक के बाद एक ट्रिगर किया जाना चाहिए।

मैं इसे @effects या reducers के साथ करना चाहता/चाहती हूं

मेरे स्लाइडर.घटक में मैं पहली मूल क्रिया को ट्रिगर करता हूं

valueChange(event: MatSliderChange) {
  this.store.dispatch(
    new SetSelectDateTime({ dateSelect: this.date, timeSelect: event.source.displayValue })
  );
}

फिर रेड्यूसर में

case ESelectDateTimeActionTypes.SetSelectDateTime: {

  return {
    ...state,
    dateTimeSelect: action.payload
  };
}

अब मुझे चयनित समय के आधार पर नया डेटा प्राप्त करने के लिए दूसरी क्रियाओं को ट्रिगर करना चाहिए इसलिए मैंने एक प्रभाव बनाया updateActualTrips

export class SchedulingsEffects {
  constructor(
    private actions$: Actions,
    private apiCallsService: ApiCallsService
  ) {}
  loadSchedulings$ = createEffect(() =>
    this.actions$.pipe(
      ofType(ESchedulesActions.GetSchedulesByDate),
      mergeMap(() =>
        this.apiCallsService.getSchedulings().pipe(
          map(trips => ({ type: ESchedulesActions.GetSchedulesByDateSuccess, payload: trips })),
          catchError(() => EMPTY)
        )
      )
    )
  );

  $LoadKpiMission = createEffect(() =>
    this.actions$.pipe(
      ofType<any>(EKpiActions.GetMissionsByStation),
      mergeMap(action =>
        this.apiCallsService.getKpiMissionByStation(action.payload, '2016-04-18').pipe(
          map(trips => ({ type: EKpiActions.GetMissionsByStationSuccess, payload: trips })),
          catchError(() => EMPTY)
        )
      )
    )
  );
  $updateActualTrips = createEffect(() =>
    this.actions$.pipe(
      ofType<any>(ESelectDateTimeActionTypes.SetSelectDateTime),
      map(action => ({ type: ESchedulesActions.GetNextSchedulesByTime, payload: action.payload }))
    )
  );
}

समस्या यह है कि प्रभाव कभी ट्रिगर नहीं होता है, लेकिन चयनित समय अपडेट किया जाता है

अपडेट करें मैंने देखा कि प्रभाव पहली बार तब शुरू हुआ जब SetSelectDateTime प्रारंभ हो रहा हो

0
infodev 29 अक्टूबर 2019, 13:00

1 उत्तर

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

आपके उदाहरण कोड में, कार्रवाई ESchedulesActions.GetNextSchedulesByTime की प्रतीक्षा में कोई प्रभाव नहीं है, केवल अन्य कार्रवाइयां जिनकी आप प्रतीक्षा कर रहे हैं, वे हैं ESchedulesActions.GetSchedulesByDate और EKpiActions.GetMissionsByStation

क्या आप यहां वास्तविक प्रभाव खो रहे हैं या क्या हमें पूरा कोड नहीं दिख रहा है? SetSelectDateTime भेजे जाने पर आपके कोड में कुछ भी नए डेटा के लिए API से नहीं पूछेगा।

या आप कह रहे हैं कि ESchedulesActions.GetNextSchedulesByTime को पहले स्टोर पर कभी नहीं भेजा जाता है (जब SetSelectDateTime के लिए प्रभाव सुन रहा हो)?

1
evilstiefel 29 अक्टूबर 2019, 13:28