J'ai essayé d'obtenir de la valeur de Mon ancien Méthode pour poteau http.
p> this.success (données) code> et
this.error (err) code> Les méthodes sont-elles appelées maintenant, la nouvelle façon que j'ai essayé d'obtenir des données est la suivante:
const fData = new FormData();
fData.append('Id', Id.toString());
fData.append('IsActive', IsActive.toString());
const test = this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => {
this.Success(data);
this.Switch = IsActive;
return this.Switch;
},
err => {
this.Error(err);
this.Switch = !IsActive;
return this.Switch;
});
console.log(test);//Subscriber {closed: false, _parentOrParents: null, _subscriptions: Array(1), syncErrorValue: null, syncErrorThrown: false, â¦}
console.log(this.Switch);//undefined at first then gives opposite result like true gives false and vice versa
3 Réponses :
Parce que je comprends que votre problème est parce que Async Stuff, je vais écrire ici une explication. Pour l'expliquer, vous ne savez pas quand les opérations ASYNC vont se terminer. Par exemple, lorsque vous faites une fonction HTTP, vous communiquez avec un serveur, vous ne savez donc pas lorsque le serveur va répondre (en raison de la connexion lente, du trafic élevé, ou peut-être parce que vous demandez une opération lourde). < / p>
Pour résoudre ce problème, nous utilisons la méthode Subscribe () qui utilise le motif d'observateur. Donc, le point ici, c'est parce que vous ne savez pas quand le serveur ou l'opération (comme les threads) allez vous terminer, vous vous abonnez-vous et continuez à regarder tout changement ou réponse. Lorsque vous le recevez, le code à l'intérieur de l'abonnement exécute. P>
Vous pouvez en apprendre davantage sur le modèle d'observateur ici: https://fr.wikipedia.org/wiki/observer_pattatn#:~:text=Le%20Observer%20pattern%20is%20A,calling%20one%20Of%%% 20Their% 20methods . et async théorie ici: https://fr.wikipedia.org/wiki/asynchrony_(Computer_(Computer_Programming) p>
Et pour votre problème, vous pouvez introduire la valeur comme FALSE, et définir la valeur de la case à cocher comme [(NGModel)] = "Interrupteur", donc lorsque le variateur var est mis à jour la case à jour aussi! P>
Depuis son Observable Strong>, vous n'obtiendrez pas la réponse immédiatement. Donc, Console Log this.Switch à l'intérieur du succès et du bloc d'erreur. Essayez ci-dessous const fData = new FormData();
fData.append('Id', Id.toString());
fData.append('IsActive', IsActive.toString());
const test = this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.subscribe(data => {
this.Success(data);
this.Switch = IsActive;
console.log("Success", this.Switch);
return this.Switch;
},
err => {
this.Error(err);
this.Switch = !IsActive;
console.log("Error", this.Switch);
return this.Switch;
});
Comme je teste à l'aide de la console.log (test); // abonné {Fermé: false, _parentorents: null, _subscriptions: tableau (1), Syncerrorvalue: null, SyncerRorthrown: false, ...} console.log (this.witch); // donne indéfini au début
Comment puis-je obtenir la valeur de retour de la souscription de «Retour this.switch» Valeur Boolean True / False ..?
Je veux juste obtenir la valeur de l'abonnement à Boolean True ou False ..
Désolé mais je présume que vous n'avez pas débogué l'extrait que j'ai fourni ci-dessus. Voir au lieu de renvoyer la valeur de this.switch code> dans la variable
Test code> Pourquoi ne pouvez-vous pas utiliser directement la valeur de
this.switch code> depuis sa une portée globale. Mais pour une raison quelconque, vous avez toujours besoin de la valeur d'abonnement code> à attribuer au test code> code>, veuillez vous reporter à ce lien Stackoverflow.com/questions/59448263/ASYNC-PIPIPE-WITH-RXJS?RQ = 1 * * Remarque: ** La valeur attribuée à
test code> sera toujours de type
abonnement
booléen code>
Répondit ma propre question ci-dessous et obtenu le résultat attendu.
utilisé async code> et
attendre code> pour obtenir le résultat et fonctionnant.
const test = await this.http.post(HostedPathConst.HostedPath + `CompanyProfile/UpdateCustomersStatus`, fData)
.toPromise().then((data)=>{
this.Switch = IsActive;
return this.Switch;
}).catch((error)=>{
this.Switch = !IsActive;
return this.Switch;
});
console.log(test); //Same result as below
console.log(this.Switch); //Same result as above
Vous convertissez une promesse observable en une promesse, qui n'émet que l'événement au test code> code> plus d'une fois, si cela fonctionne pour vous que Cool. Quoi qu'il en soit, le topromise () est devenu obsolète afin de mieux vérifier le lien pour alterner Stackoverflow.com/Questtions/51677405/...
Je ne comprends pas vraiment le problème ici, je comprends donc que la réponse du serveur où vous faites le message retourne un BOOL, mais cela signifie qu'il fonctionne correctement et que vous pouvez obtenir une réponse du serveur.
@Erik ma valeur booléenne est une case à cocher si elle est vérifiée, il renvoie True Sinon False mais dans le premier scénario, il renvoie une valeur non définie, puis une valeur opposée si je vérifiais son faux et décoché sa true sur la console.log
Eh bien, une chose est sûre. Les opérations HTTP sont asynchrones, donc dans l'heure d'exécution, il est possible que cette console.log (this.witch); arrivera avant cela, cela.switch = isactif; Alors peut-être, c'est la raison pour laquelle vous devez non défini.
@Erik Comment puis-je utiliser synchronous un exemple serait utile ..?