Je ne sais pas comment extraire la valeur d'un Observable qui sera retournée par une fonction dans laquelle l'Observable est présent. J'ai juste besoin d'une valeur à retourner, rien d'autre.
Version actuelle qui fonctionne
function getValueFromObservable() {
this.store.subscribe(
(data:any) => {
console.log(data)
}
)
}
getValueFromObservable()
J'ai besoin que ça fonctionne, que la fonction renvoie une valeur, puis.. :
function getValueFromObservable() {
this.store.subscribe(
(data:any) => {
return data
}
)
}
console.log(getValueFromObservable())
Qu'est-ce que je fais de mal ici ?
2 votes
Vous devez renvoyer un Observable/Promesse et transmettre les données par son intermédiaire lorsque votre observable est résolu.
2 votes
Pouvez-vous mettre un code simple pour cela ?
8 votes
Ce que vous essayez de faire est un anti-modèle : Vous essayez de "synchroniser" une tâche asynchrone. Ce n'est pas la façon dont les observables sont censés fonctionner. En bref, dans la plupart des cas, une fonction ayant un observable en entrée doit également retourner un observable - ou ne rien retourner. Et lorsque vous avez besoin de faire quelque chose avec la sortie, abonnez-vous à celle-ci. Dans ce cas, si vous voulez consigner les données dans console.log, il suffit de le faire à l'intérieur de
subscribe
1 votes
Je comprends tout ce que vous avez dit. J'utilise juste le journal de la console comme démo, j'utiliserai ces données plus tard, c'est pourquoi j'ai besoin du journal de la console en dehors de l'observable. Le but est d'avoir la fonction qui, lorsque vous pouvez vous abonner à l'observable, obtient des données, se désabonne et renvoie les données dans cette fonction afin que je puisse utiliser ces données plus tard. Je sais que c'est un anti-modèle, mais j'ai besoin que cela fonctionne. Toute aide est la bienvenue. Actuellement, ma solution fonctionne, mais je ne suis pas trop confiant à son sujet.
4 votes
Attention, s'il vous plaît ! Le code de la section 'SOLUTION' est absolument incorrect. Ne l'utilisez pas ! Il ne fonctionnera que si la section this.store.subscribe( (data:any) => { output = data } ).unsubscribe() est terminée jusqu'au retour. Sinon, elle retournera undefined.
1 votes
Je viens de Java, mais ce truc asynchrone me tue. Par exemple, je m'attends à ce qu'une fonction renvoie une valeur, mais elle ne le fait jamais. Recommandez-vous une source sur le problème de l'asynchronisme en Javascript ?
0 votes
Essayez avec "of" from import { Observable, of } from 'rxjs' ;