Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

328
Vistas
Tienda Ngrx, efectos, configuración de sondeo Http Ajax en Angular 2

Estoy creando una aplicación Ngrx Angular 2 y estaba intentando que mis llamadas http siguieran sondeando después de un intervalo de tiempo. He visto el uso de la función interval() , pero en el caso de Ngrx, cuando las llamadas de servicio se realizan dentro @Effect() , da un error. Por favor avise:

 @Injectable() export class TasksEffects { constructor( private actions$: Actions, private TS: TaskService ){} @Effect() onLoadTasksLoadTasks$: Observable<Action> = this.actions$.ofType(tasksActions.ActionTypes.LOAD_TASKS) .switchMap(() => { return this.TS.index() .map((res) => new tasksActions.LoadTasksSuccessAction(res.json())) .catch(err => of(new tasksActions.LoadTasksFailAction(err))); });

Quiero ejecutar la función switchMap cada diez segundos. Esto no funciona.

 @Effect() onLoadTasksLoadTasks$: Observable<Action> = this.actions$.ofType(tasksActions.ActionTypes.LOAD_TASKS) .switchMap(() => { return this.TS.index() .map((res) => new tasksActions.LoadTasksSuccessAction(res.json())) .catch(err => of(new tasksActions.LoadTasksFailAction(err))); }).interval(10000);

El tipo de error es:

ingrese la descripción de la imagen aquí

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Como se indica en la otra respuesta, el interval es una función estática, por lo que no existe en el prototipo Observable , razón por la cual se produce su error.

En cambio, deberías poder lograr lo que quieres usando timer .

 import { Observable } from 'rxjs/Observable'; import 'rxjs/add/observable/of'; import 'rxjs/add/observable/timer'; import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/switchMap'; @Effect() onLoadTasksLoadTasks$: Observable<Action> = this.actions$ .ofType(tasksActions.ActionTypes.LOAD_TASKS) .switchMap(() => Observable .timer(0, 10000) .switchMap(() => this.TS.index() .map((res) => new tasksActions.LoadTasksSuccessAction(res.json())) .catch(err => Observable.of(new tasksActions.LoadTasksFailAction(err))) ) );

Con el timer , es posible especificar un retraso inicial y aquí se establece en cero para que el temporizador se active inmediatamente. Después de eso, se disparará cada diez segundos, pero si se recibe otra acción LOAD_TASKS , switchMap verá que se canceló la suscripción y se creó un nuevo timer , etc.

about 4 years ago · Santiago Trujillo Denunciar

0

En rxjs 5 interval() es una función estática. Solo puede usarlo como creador Observable.interval(1) .

Prueba esto.

 this.actions$.ofType(tasksActions.ActionTypes.LOAD_TASKS) .skipUntil(Observable.interval(10000)) .switchMap(res => {...})
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda