Je ne sais pas comment extraire la valeur de Observable pour qu'elle soit renvoyée par la fonction dans laquelle Observable est présent. J'ai juste besoin d'une valeur pour être retourné, rien d'autre.
Version actuelle qui fonctionne
function getValueFromObservable() {
this.store.subscribe(
(data:any) => {
console.log(data)
}
)
}
getValueFromObservable()
J'ai besoin de ça pour fonctionner, pour retourner une valeur, puis:
function getValueFromObservable() {
this.store.subscribe(
(data:any) => {
return data
}
)
}
console.log(getValueFromObservable())
Qu'est-ce que je fais mal ici?
Je me rends compte que cette question remonte à il y a un certain temps et que vous avez sûrement une solution appropriée à l'heure actuelle, mais pour tous ceux qui le recherchent, je suggérerais de la résoudre avec la promesse de conserver le modèle asynchrone. Une version plus détaillée créerait une nouvelle promesse:
function getValueFromObservable() {
return new Promise(resolve=>{
this.store
.take(1) //useful if you need the data once and don't want to manually cancel the subscription again
.subscribe(
(data:any) => {
console.log(data;
resolve(data);
})
}
}
Sur le destinataire, vous devrez alors "attendre" que la promesse soit résolue avec quelque chose comme ceci:
getValueFromObservable()
.then((data:any)=>{
//... continue with anything depending on "data" after the Promise has resolved
})
Une solution plus fine utiliserait plutôt le fichier .toPromise () de RxJS:
function getValueFromObservable() {
return this.store
.take(1)
.toPromise()
}
Le côté receveur reste bien sûr le même que ci-dessus. J'espère que ça t'as aidé!
Ce n’est pas une idée exacte de l’utilisation de Observable
Dans le composant, vous devez déclarer un membre de la classe qui contiendra un objet (quelque chose que vous allez utiliser dans votre composant)
export class MyComponent {
name: string = "";
}
Alors un Service
vous retournera un Observable
:
getValueFromObservable():Observable<string> {
return this.store.map(res => res.json());
}
Component
devrait se préparer à pouvoir en récupérer une valeur:
OnInit(){
this.yourServiceName.getValueFromObservable()
.subscribe(res => this.name = res.name)
}
Vous devez affecter une valeur d'un Observable
à une variable:
Et votre modèle consommera la variable name
:
<div> {{ name }} </div>
Une autre façon d’utiliser Observable
consiste à utiliser async
pipe http://briantroncone.com/?p=62
Remarque : Si ce n'est pas ce que vous demandez, veuillez mettre à jour votre question avec plus de détails.
Si vous souhaitez vous pré-abonner au même Observable qui vous sera renvoyé, utilisez simplement
.faire():
function getValueFromObservable() {
return this.store.do(
(data:any) => {
console.log("Line 1: " +data);
}
);
}
getValueFromObservable().subscribe(
(data:any) => {
console.log("Line 2: " +data)
}
);
Le problème est que les données sont capturées à l'intérieur de l'observable et que je peux simplement les consigner par console. Je veux renvoyer cette valeur et console.log ou ce que ce soit à partir d'un fichier différent en appelant la fonction dans laquelle il réside.
On dirait que vous recherchez un "valeur actuelle" dans un observable, quand il émet et après une émission.
Subject
et Observable
ne possède pas une telle chose. Lorsqu'une valeur est émise, elle est transmise à ses abonnés et la Observable
en est complétée.
Vous pouvez utiliser BehaviorSubject
qui stocke la dernière valeur émise et l’émet immédiatement aux nouveaux abonnés.
Il a également une méthode getValue()
pour obtenir la valeur actuelle;
Lectures complémentaires:
Comment obtenir la valeur actuelle de RxJS Subject ou Observable?
Les valeurs observables peuvent être extraites de n’importe quel emplacement. La séquence source est d'abord poussée sur un observateur spécial capable d'émettre ailleurs. Ceci est réalisé avec la classe Subject des extensions réactives (RxJS).
var subject = new Rx.AsyncSubject(); // store-last-value method
Stocker la valeur sur l'observateur .
subject.next(value); // store value
subject.complete(); // publish only when sequence is completed
Pour récupérer la valeur ailleurs, abonnez-vous à l'observateur de la manière suivante:
subject.subscribe({
next: (response) => {
//do stuff. The property name "response" references the value
}
});
Les sujets sont à la fois observables et observateurs. Il existe d'autres types d'objet , tels que BehaviourSubject et ReplaySubject pour d'autres scénarios d'utilisation.
N'oubliez pas d'importer RxJS.
var Rx = require('rxjs');