81 votes

EmptyError: aucun élément en séquence

Je me suis mise à niveau de mon Angular2 application à partir de la version 2.0.0 de 2.3.0, et je suis en cours d'exécution dans l'erreur suivante. Toutes les idées pour lesquelles? J'ai vu ce post (Angulaire 2.0.1 Routeur EmptyError: pas d'éléments dans la séquence), mais après avoir essayé cela, la question demeure. Quelles sont les causes de cette erreur?

Error: Uncaught (in promise): EmptyError: no elements in sequence
Error: no elements in sequence
    at EmptyError.ZoneAwareError (zone.js:672)
    at new EmptyError (EmptyError.ts:13)
    at FirstSubscriber._complete (first.ts:161)
    at FirstSubscriber.Subscriber.complete (Subscriber.ts:122)
    at Subject._subscribe (Subject.ts:109)
    at Subject.Observable.subscribe (Observable.ts:98)
    at Observable._subscribe (Observable.ts:158)
    at Observable.subscribe (Observable.ts:98)
    at Observable._subscribe (Observable.ts:158)
    at FirstOperator.call (first.ts:82)
    at Observable.subscribe (Observable.ts:96)
    at Object.subscribeToResult (subscribeToResult.ts:32)
    at MergeAllSubscriber._next (mergeAll.ts:82)
    at MergeAllSubscriber.Subscriber.next (Subscriber.ts:95)
    at MapSubscriber._next (map.ts:80)
    at resolvePromise (zone.js:475) [angular]
    at resolvePromise (zone.js:460) [angular]
    at /libs/zone.js/dist/zone.js:509:17 [angular]
    at Object.onInvokeTask (core.umd.min.js:32) [angular]
    at ZoneDelegate.invokeTask (zone.js:261) [angular]
    at Zone.runTask (zone.js:151) [<root> => angular]
    at drainMicroTaskQueue (zone.js:405) [<root>]
    at ZoneTask.invoke (zone.js:336) [<root>]ErrorHandler.handleError @ core.umd.min.js:31next @ core.umd.min.js:32generatorOrNext.object.schedulerFn @ core.umd.min.js:32SafeSubscriber.__tryOrUnsub @ Subscriber.ts:238SafeSubscriber.next @ Subscriber.ts:190Subscriber._next @ Subscriber.ts:135Subscriber.next @ Subscriber.ts:95Subject.next @ Subject.ts:61EventEmitter.emit @ core.umd.min.js:32NgZone.triggerError @ core.umd.min.js:32onHandleError @ core.umd.min.js:32ZoneDelegate.handleError @ zone.js:233Zone.runGuarded @ zone.js:129_loop_1 @ zone.js:416drainMicroTaskQueue @ zone.js:425ZoneTask.invoke @ zone.js:336

J'ai également remarqué que NavigationError objet est levée lorsque j'essaie de modifier un itinéraire qui utilise des Gardes. Mais seulement l'erreur ci-dessus est ce qui est affiché dans la console.

NavigationError {id: 2, url: "/home", error: EmptyError}

Je suis un peu à perte et serais reconnaissant de toute aide.

102voto

Lucas Basquerotto Points 1040

Dans mon cas, j'ai ces erreurs lorsque j'ai utilisé first() en Observable qui avaient un takeUntil() émis avant l' first().

Exemple:

let test$ = new ReplaySubject(1);
let testAux$ = new ReplaySubject(1);
let test2$ = test$.asObservable().takeUntil(testAux$.asObservable());
test2$.first().subscribe(() => console.log('first!'));
testAux$.next(null);

Il était difficile de découvrir le problème, car j'ai renvoyé un observable avec takeUntil() dans un service qui a été utilisé par une autre classe (dans un autre fichier) qui appelait first(), et l'erreur a été reçu au cours de navigation de la page (car takeUntil() a reçu une observable celle qui est émise lorsque la page précédente a été détruit), et il est apparu que le problème était dans la navigation elle-même.

Le plus étrange, c'est que l'erreur se produit lorsque l' next() est appelé, et pas dans le 2ème argument de l' subscribe(), provoquant le processus de navigation lui-même à l'échec. Je ne sais pas si cette fonctionnalité a été choisi par le rxjs équipe à se comporter de cette façon, car il les rend beaucoup plus difficile à isoler le problème.

Selon ce commentaire:

Première émettent exactement un seul élément ou de jeter une erreur[...] Si vous souhaitez obtenir plus d'un élément à partir de l'observable, utilisez .take(1).

81voto

golfadas Points 406

Cette erreur se produit lors de l'utilisation de RxJS 5.5.3 angulaire (version 4/5), donc il suffit de sauter RxJS 5.5.3, et l'utilisation RxJS 5.5.4 par l'ajout d' "rxjs": "^5.5.4" de votre package de projet.json.


Avant RxJS 5.5.4 est sorti réponse: (vieux, ne le faites pas)

  • Verrouiller la version 5.5.2 RxJS sur l'emballage.json source
  • ajouter pathMatch: "full" sur vide chemins de source

Il semble que c'est une RxJS question qui devrait être corrigé bientôt. source

21voto

Victor96 Points 3151

Vous devez changer pour:

 canActivate(route: ActivatedRouteSnapshot): Observable<boolean>{
   return new Observable<boolean>(resolve => {
      resolve.next(true);
      resolve.complete();
  });
}
 

================

Je ne sais pas pourquoi, mais pour moi, cette erreur a été causée par des gardes de routeur CanActivate utilisant des observables. Le passage aux promesses a cependant résolu le problème.

Je suis passé de là:

 canActivate(route: ActivatedRouteSnapshot): Observable<boolean>{
     return new Observable<boolean>(resolve => {

          resolve.complete(true);
        //or
          resolve.complete(false);

    });
}
 

pour ça:

 canActivate(route: ActivatedRouteSnapshot){
     return true;
        //or
          return false;

    });
}
 

10voto

The Segfault Points 365

J'ai eu le même problème parce que je faisais un .first () après un this.http.get (); Http.get renvoie un observable à froid, donc le premier n'était pas nécessaire car les observables à froid se désinscrivent.

this.http.get (). pipe (first ()); -> EmptyError: aucun élément en séquence

7voto

knigalye Points 155

Ajoutez cette propriété à votre itinéraire.

 pathMatch: 'full
 

par exemple.

 { pathMatch: 'full', path: "", component: HomeComponent }
 

Ça a marché pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X