Bonjour,
Même après avoir lu sur les concepts et les utilisations de Fondamentalement dans mon fonction: p> async code> et
attendre code>, j'ai toujours des problèmes de réel aplicattions d'entre eux. p>
ngoninit code> i appel d'appel à une fonction: p>
async authenticateUser() {
console.log("----Autenticando Usuário----");
this.token = localStorage.getItem("token");
this.userName = localStorage.getItem("userName");
this.userPhoto = localStorage.getItem("userPhoto");
this.currentUser = await this.auth.getSession(this.token);
this.attributions = this.currentUser.sessao.grupos;
this.userEmail = this.currentUser.sessao.email;
this.instalation = this.currentUser.instalacao;
}
3 Réponses :
Bien que votre méthode CODE> GETESSION Essaie d'effectuer une action asynchrone, vous ne l'avez pas configuré pour le faire correctement. Vous retournez En ce qui concerne les méthodes asynchronisées, vous avez quelques choix. En angulaire, nous utilisons généralement des observables car ils permettent le plus de contrôle. Dans ce cas, vous pouvez simplement renvoyer le Vous pouvez également avoir actuelUtiliser code> en dehors du
S'abonner CODE> Block, et toute la méthode n'a aucun moyen de dire à son appelant qu'il est asynchrone, alors async / attendre ne fera pas de différence. p>
http.post code> observable dans
GETESTESSION CODE>, puis vous abonnez-vous dans
authogédicuer code>. Ensuite, vous pouvez soit mettre les lignes suivantes à l'intérieur du
S'abonner CODE> Call ou em> Utilisez les opérateurs code> et rxjs pour effectuer les actions suivantes. P>
GETESTESSION CODE> Renvoyer un
Promise code> qui résout avec les données requises. Cela permettrait à Async / attendre de travailler (bien que ce ne soit pas un motif angulaire). P>
Lorsque j'essaie de vous abonner à l'authentificateur code>, il apparaît uniquement pour vous désabonner, savez-vous pourquoi cela se produirait-il?
Parce que vous retournez l'abonnement code> code> car vous avez laissé le S'abonner CODE> Appel dans
GETESSION CODE> Comme je l'ai dit, vous prenez le
S'abonner < / Code> Appel de
GETESTESSION CODE> et placez-le dans
authentifieruser code>.
GETESSIES () doit rendre une promesse pour attendre de travailler dans ce cas. ou P> getSession(){
return new Promise((resolve, reject) => {
...
resolve(data)
})
}
Vous pouvez tuyer avec une carte de RXJS à votre valeur de retour et définissez sur JSON. La promesse et les observables sont légères différents même si les deux sont des opérations asynchrones. Lorsque vous utilisez un motif observable et que vous avez fixé l'écoute lorsque vous vous abonnez, cela signifie que vous pouvez recevoir plusieurs valeurs plus tard (ASYNC). Le modèle de promesse vous donne une valeur plus tard que vous allez écouter de la résolution (résultat). Donc, dans votre cas, P> getSession(xtrToken) {
xtrToken = "{\"token\":\"" + xtrToken.toString() + "\"}";
this.http.post(this.apiURL + "/auth", xtrToken)
.map((resposta) => {
if (resposta != null) {
localStorage.setItem("currentUser", JSON.stringify(resposta));
if (window.location.href.indexOf("?") > -1) {
var url = window.location.href;
var value = url = url.slice(0, url.indexOf('?'));
value = value.replace('@System.Web.Configuration.WebConfigurationManager.AppSettings["BaseURL"]', '');
var newUrl = value;
window.history.pushState({}, null, newUrl);
}
this.currentUser = JSON.parse(localStorage.getItem("currentUser"));
}
});
return this.currentUser;
}
authenticateUser() {
console.log("----Autenticando Usuário----");
this.token = localStorage.getItem("token");
this.userName = localStorage.getItem("userName");
this.userPhoto = localStorage.getItem("userPhoto");
this.auth.getSession(this.token).subscribe((result) => {
this.currentUser = result;
});
this.attributions = this.currentUser.sessao.grupos;
this.userEmail = this.currentUser.sessao.email;
this.instalation = this.currentUser.instalacao;
}
mettre les lignées de ceci.Attributions = ceci.currenttuser, cela.useremail .. Inside abcaye fonction
Dupliqué possible de Comment puis-je retourner la réponse d'une asynchrone appelez?
Déjà essayé cette solution, n'a pas fonctionné