Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

290
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda