Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

326
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!