Dans l'événement click d'angular2 http, le premier clic n'est pas défini, et la valeur ne peut être obtenue qu'après le deuxième clic. Quelle en est la raison et comment l'implémenter ? Chaque clic affiche une valeur différente ?
Par exemple, dans le code ci-dessous, j'ai obtenu le nom et le mot de passe de okLogin(). J'attribue les données renvoyées à this.result, puis j'exécute isLogin() après que l'événement click se produit, et isLogin exécutera okLogin. . Mais j'ai constaté que lorsque je cliquais pour la première fois, le résultat n'était pas défini. Lorsque je cliquais pour la deuxième fois, je pouvais obtenir le résultat. Cependant, lorsque la valeur du résultat changeait, le premier clic affichait toujours la valeur précédente, ce qui était le cas. n’était pas le cas. La valeur actuellement obtenue. Comment le résoudre ?
okLogin(){
this.http.get('http://localhost:3000/api/users/login/'+this.Name+'/'+this.Pwd+'')
.map(res => res.json())
.subscribe(
data => this.result=data,
err => console.error(err),
() => console.log('done')
);
return this.result
}
isLogin(event){
if(this.Name===''||this.Name===undefined&&this.Pwd===''||this.Pwd===undefined){
this.check = true;
}
this.check = false;
this.okLogin();
// this.result = this.okLogin();
console.log(this.result);
if(this.result===true){
console.log('登录成功')
}else{
console.log('发生错误')
}
L'effet imprimé :
indéfini
{data of data}
J'ai initialisé la valeur du résultat auparavant, mais lorsque le nom d'utilisateur et le mot de passe entrants ont changé plus tard, les données http.get avaient changé, mais le résultat était toujours la valeur précédente, et il fallait un deuxième clic pour s'afficher correctement.
J'ai également rencontré ce problème lorsque je faisais count auparavant, mais l'ajout automatique démarrait directement à partir de 0, et je ne voulais pas voir 0, je voulais juste qu'il commence à partir de 1, donc j'ai défini une valeur par défaut pour le compte est 1
La méthode okLogin() est mal écrite.
subscribe
Il existe un comportement asynchrone. Ainsi, lorsque okLogin est appelé, il apparaîtra que this.result n'a reçu aucune valeur et isLogin continuera à s'exécuter.Plan de modification :
(1)Méthode de promesse
(2)Modifier la façon d'écrire l'abonnement