es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No quiero cancelar la solicitud HTTP si los parámetros de consulta de mi solicitud son diferentes en SwitchMap.

Estoy utilizando el operador SwitchMap de RXJS en mi aplicación de Angular para cancelar las solicitudes anteriores, pero está cancelando las solicitudes si los parámetros de la consulta son diferentes.

¿Cómo podemos evitar cancelar solicitudes duplicadas anteriores si los parámetros de la solicitud son diferentes?

@Effect()
loadWeeklyForecastForLongRange$: Observable<loadweekforecastforlongrange |="" action=""> = this.actions$.pipe(
ofType(LoadWeekForecastActions.LOAD_WEEK_FORECAST_FOR_LONG_RANGE),
switchMap((action: LoadWeekForecastForLongRange) => {
const url = this.getRequestURLForLongRange(action.payload);
return this.http.get<><weeklyforecastresponse>>(url)
.pipe(
map((data) => {
console.log(data);
}
}),
catchError((error) => {
return handleErrorForTimePeriod(error, LoadWeekForecastForLongRangeFailed, {});
})
);
})
);

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar que el operador SwitchMap cancele las solicitudes anteriores si los parámetros de consulta son diferentes, puedes utilizar el operador distinctUntilChanged. Puedes pasarlo como argumento dentro de la función switchMap, de esta manera:

    switchMap((action: LoadWeekForecastForLongRange) =>
      this.service.fetchData(action)
        .pipe(
          distinctUntilChanged((previous: any, current: any) => {
            return previous.queryParameter === current.queryParameter;
          })
        )
    );
    

    Aquí, estás llamando al operador distinctUntilChanged, que devuelve un observable que emite solo el último valor del observable fuente si el valor es diferente al valor anterior. En este contexto, se asegura de que el operador SwitchMap no cancele la solicitud anterior si los parámetros de consulta son diferentes, conservando así la solicitud anterior.

    Puedes modificar el fragmento de código anterior para que coincida con la implementación de tu código.

Comments are closed.