0
votes

La valeur angulaire est null sous l'événement Ngoint

J'ai un problème d'accès à une valeur variable après sa définition dans l'événement Ngoint, la valeur du VAL est disponible dans la fonction getApps, mais elle n'est pas disponible sous forme de processus

TS < / p> xxx


5 commentaires

S'abonner (.....) La partie est asynchrone


Alors, comment puis-je résoudre le problème


Il y a des fautes de frappe sur le code, pouvez-vous le mettre à jour?


appelez-le dans l'inscription


Je suis au courant de cette solution..J'ai une logique complexe et avoir besoin d'une autre manière


4 Réponses :


0
votes
val:any = null;
.subscribe is asynchronous, hence this._srvc.getApps() response might not available while your this.process() get executed. Thats why it is showing that error. To avoid you can always initialize the variable with the appropriate type. That's the aim of TS

0 commentaires

3
votes

Vous ne définissez pas val dans la fonction getApps . Vous l'avez défini dans la fonction de rappel que vous passez à S'abonner .

getapps fonctionne de manière asynchrone et lorsque la fonction processus est appelée, la fonction de rappel n'a pas encore été exécutée.

Vous pouvez appeler la fonction processus à l'intérieur de la fonction de rappel.


2 commentaires

Oui, cela fonctionnera pour un exemple simple ... J'ai simplifié mon code ... il n'est pas possible d'appeler le processus à l'intérieur des getApps..s-là d'une autre manière?


@RGOAL Il n'y a pas d'autre moyen. La façon dont je regarde, c'est que tout dans les incendies dossiers automatiquement sauf pour abonna . Je suppose toujours que cela abonna 10 secondes après que je les appelle. Donc, si quelque chose dépend de la valeur Subscribe, vous devrez trouver un coup d'œil pour l'appeler dans la souscription ou avoir une sorte de détection de changement. Si vous en avez besoin dans HTML, vous devrez peut-être utiliser un * ngif



1
votes

La réponse de la paresse est correcte. Mais si vous souhaitez accéder à un code asynchrone de manière synchrone, vous pouvez envisager d'utiliser ASYNC / AWAIT.

  1. transformez votre observable en une promesse afin que cela puisse être attendu sur li>
  2. Transformez votre getApps code> et init dans une fonction asynchrone pour vous attendre aux promesses li>
  3. attend le résultat et appelez d'autres fonctions de manière synchrone li> OL>
    export class SomeComponent implements OnInit {
      val:any;
    
      async ngOnInit() { // transform this into an async function
        try {            // handle errors in synchronous try-catch code
          const val = await this.GetApps();
          this.process(val);  // do something
    
        } catch(error) {
          this.showMessage('some error: ' + <any>error, 1)
        }
      }
    
      async GetApps() { // transform this into an async function
        return this._srvc.getApps().toPromise(); // transform this into a Promise
      }
    
      this.process(val: any) {
        console.log(val) // is not undefined!
      }
    
    }
    


1 commentaires

Cela fonctionnera ... aussi je suis venu avec une autre façon ... Voir ma réponse au fond ...



0
votes

J'ai proposé un autre moyen de résoudre ce problème, de sorte que si vous devez accéder à une variable dans Ngonint et que vous ne souhaitez pas appeler la méthode de processus dans le souscription GetaPApp, vous pouvez utiliser Global Val

1 ) l'a ajouté à l'app.commonent à l'intérieur du constructeur xxx

2) app-params.Service (service partagé) xxx

3) enfin à l'intérieur de la classe constructeur Somecomoent xxx


0 commentaires