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

356
Vistas
Cómo ejecutar un servicio cuando la aplicación se inicia en Angular 2

Creé un servicio SocketService, básicamente inicializa el socket para permitir que la aplicación escuche en el puerto. Este servicio también interactúa con algunos componentes.

// socket.servicio.ts

 export class SocketService { constructor() { // Initializes the socket } ... }

Sé que el código en el constructor() de SocketService solo comienza a ejecutarse cuando un componente usa SocketService.

Y, por lo general, el código en app.ts se ve así:

// aplicación.ts

 import {SocketService} from './socket.service'; ... class App { constructor () {} } bootstrap(App, [SocketService]);

Sin embargo, quiero que este servicio se ejecute cuando se inicie la aplicación. Así que hice un truco, solo agregue private _socketService: SocketService en el constructor de la aplicación (). Así que ahora los códigos se ven así:

// aplicaciones.ts (nuevo)

 import {SocketService} from './socket.service'; ... class App { constructor (private _socketService: SocketService) {} } bootstrap(App, [SocketService]);

Ahora funciona. El problema es que a veces se ejecutan los códigos en el constructor() de SocketService, a veces no. Entonces, ¿cómo debo hacerlo correctamente? Gracias

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La respuesta de Stuart apunta en la dirección correcta, pero no es fácil encontrar información sobre APP_INITIALIZER. La versión corta es que puede usarla para ejecutar el código de inicialización antes de que se ejecute cualquier otro código de aplicación. Busqué un rato y encontré explicaciones aquí y aquí , que resumiré por si desaparecen de la web.

APP_INITIALIZER se define en angular/core. Lo incluyes en tu app.module.ts así.

 import { APP_INITIALIZER } from '@angular/core';

APP_INITIALIZER es un OpaqueToken (o un InjectionToken desde Angular 4) que hace referencia al servicio ApplicationInitStatus. ApplicationInitStatus es un proveedor múltiple . Admite múltiples dependencias y puede usarlo en su lista de proveedores varias veces. Se usa así.

 @NgModule({ providers: [ DictionaryService, { provide: APP_INITIALIZER, useFactory: (ds: DictionaryService) => () => return ds.load(), deps: [DictionaryService], multi: true }] }) export class AppModule { }

Esta declaración de proveedor le dice a la clase ApplicationInitStatus que ejecute el método DictionaryService.load(). load() devuelve una promesa y ApplicationInitStatus bloquea el inicio de la aplicación hasta que se resuelve la promesa. La función load() se define así.

 load(): Promise<any> { return this.dataService.getDiscardReasons() .toPromise() .then( data => { this.dictionaries.set("DISCARD_REASONS",data); } ) }

Configurado así, el diccionario se carga primero y las otras partes de la aplicación pueden depender de él de manera segura.

Editar: tenga en cuenta que esto aumentará el tiempo de carga inicial para su aplicación por el tiempo que tarde el método load(). Si desea evitar eso, puede usar un resolver en su ruta.

over 4 years ago · Santiago Trujillo Denunciar

0

Mueva la lógica en su constructor de SocketService a un método en su lugar y luego llámelo en el constructor de su componente principal o ngOnInit

ServicioSocket

 export class SocketService{ init(){ // Startup logic here } }

aplicación

 import {SocketService} from './socket.service'; ... class App { constructor (private _socketService: SocketService) { _socketService.init(); } } bootstrap(App, [SocketService]);
over 4 years ago · Santiago Trujillo Denunciar

0

Consulte también APP_INITIALIZER , que se describe como;

Una función que se ejecutará cuando se inicialice una aplicación.

over 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