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
4 Réponses :
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
Vous ne définissez pas Vous pouvez appeler la fonction val code> dans la fonction getApps code>. Vous l'avez défini dans la fonction de rappel que vous passez à S'abonner CODE>. P>
getapps code> fonctionne de manière asynchrone et lorsque la fonction processus code> est appelée, la fonction de rappel n'a pas encore été exécutée. P>
processus code> à l'intérieur de la fonction de rappel. p>
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 code>. 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 code>
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.
getApps code> et init dans une fonction asynchrone pour vous attendre aux promesses li>
- 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!
}
}
Cela fonctionnera ... aussi je suis venu avec une autre façon ... Voir ma réponse au fond ...
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
2) app-params.Service (service partagé) strong> p>
S'abonner (.....) CODE> La partie est asynchroneAlors, 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