EmptyError: no hay elementos en secuencia


Estoy actualizando mi aplicación Angular2 de 2.0.0 a 2.3.0, y me estoy topando con el siguiente error. Alguna idea de por qué? Vi este otro post ( Angular 2.0.1 Router EmptyError: no elements in sequence ), pero después de probar esto, el problema sigue siendo. ¿Qué causa este error?

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

También he notado que se lanza un objeto NavigationError cuando intento cambiar a una ruta que usa Guardias. Pero solo el error anterior es lo que se muestra en la consola.

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

Estoy un poco perdido y agradecería cualquier ayuda.

Author: Community, 2016-12-14

5 answers

Este error ocurre al usar RxJS 5.5.3 con angular (versión 4/5), así que simplemente omita RxJS 5.5.3 y use RxJS 5.5.4 agregando "rxjs": "^5.5.4" a su paquete de proyecto.json.


Antes de que RxJS 5.5.4 saliera respuesta: (viejo, no hagas esto)

  • Bloquear la versión 5.5.2 RxJS en el paquete.json source
  • añadir pathMatch:' full ' en rutas vacías source

Parece que este es un problema RxJS que debería ser parcheado muy pronto. fuente

 75
Author: golfadas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-14 10:11:29

Necesitas cambiar a:

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

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

No estoy seguro de por qué, pero para mí este error fue causado por canActivate router guards usando observables. Sin embargo, pasar a las promesas solucionó el problema.

Me moví de esto:

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

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

    });
}

A esto:

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

    });
}
 14
Author: Victor96,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-24 17:24:24

En mi caso tengo esos errores cuando usé first() en un Observable que tenía un takeUntil() emitido antes de first().

Ejemplo:

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);

Fue difícil descubrir el problema porque devolví un observable con takeUntil() en un servicio que fue utilizado por una clase diferente (en un archivo diferente) que llamó first(), y el error se recibió durante la navegación de la página (porque takeUntil() recibió un observable que emitió cuando se destruyó la página anterior), y apareció como el problema en la navegación misma.

Lo más extraño es que el error ocurre cuando se llama a next(), y no en el segundo argumento de subscribe(), causando que el proceso de navegación en sí falle. No se si esta característica fue elegida por el equipo de rxjs para comportarse de esta manera, porque hace mucho más difícil aislar el problema.

De acuerdo con este comentario :

Primero emitirá exactamente un elemento o lanzará un error [...] If you would like to get at most un elemento del observable, utilice .take(1).

 9
Author: Lucas Basquerotto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 15:24:15

Agregue esta propiedad a su ruta.

pathMatch: 'full

Por ejemplo.

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

Funcionó para mí.

 7
Author: knigalye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-05 06:14:42

Tuve este problema en Angular 6 / RxJS 6 y descubrí que se debía a que mi guardia tenía una redirección y se completaba justo después.

Antes:

if (!res) {
  this.router.navigate(['/']);
  observer.complete(); // <-- This was the offender
}

Después de:

if (!res) {
  this.router.navigate(['/']);
}
 1
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-13 01:46:01