rxjs observables.de(objet) renvoie {“_isScalar”: “”, “value”: {}, “planificateur”: “” } au lieu de la valeur
Je suis assez nouveau à l'rxjs.
J'ai essayé de créer une fonction qui s'exécute une angulaires 2 de la requête http comme ça:
syncFromApi$() {
//create Headers
...
let ob$ = this.http.post(
CONFIG_APP.apiEndpoint + '/sync/app',
'',
{ headers: headers }
)
.map((response:Response) => {
return Observable.of({type: "success", payload: response.json()});
})
.catch(function (err:Response) {
return Observable.of({type: "error", payload: err.json()});
});
return ob$;
}
En bref, quand avoir du succès, je suis de retour d'un Objet qui indique si la requête a été couronnée de succès. Après que j'ai envie de changer de carte en fonction de l'objet retourné:
let o$ = syncFromApi$()
.switchMap((value) => {
console.log("value", JSON.stringify(value, null, 0));
if (data.type === 'success') {
return Observable.of(1);
} else if (data.type === 'error') {
return Observable.of(2);
}
});
Et voici le problème que j'ai le visage. De la console.journal(...) les sorties d'un objet comme celui-ci:
value, {"_isScalar": true, "value": THIS_IS_WHAT_I_NEED_AS_VALUE, "scheduler": null}
Mais j'ai besoin que l'objet, je suis retourné avec la syncFromApi fonction$.
Quelqu'un peut m'expliquer, si je suis en utilisant observable.of()
dans la mauvaise manière?
J'ai essayé observable.of(1)
et retourne 1 comme valeur. Si j'utilise un objet (observable.of({ type: "myType", message: "myMessage" })
), elle renvoie un objet habillage de l'objet j'ai besoin avec les touches "_isScalar", "valeur" et de "planificateur".
Merci d'avance.
plus tard, je souhaite m'abonner à la chaîne des observables
carte de transformer une observable de x dans une observable de y grâce à une fonction de transformation de x en y. Pas besoin d'envelopper y dans une Observable.
si je supprime Observables.de() autour de l'objet dans le bloc catch, mon tapuscrit compilateur se plaint avec le message suivant:
app/app/services/state.ts|116 col 14 error| Argument of type '(err: Response) => { type: string; payload: any; }' is not assignable to parameter of type '(err: any, caught: Observable<{ type: string; payload: any; }>) => Observable<{}>'. Type '{ type: string; payload: any; }' is not assignable to type 'Observable<{}>'. Property '_isScalar' is missing in type '{ type: string; payload: any; }'.
Ce qui est dans les captures semble OK pour moi. Quelle est la carte qui ne fonctionne pas.
OriginalL'auteur divramod | 2016-05-02
Vous devez vous connecter pour publier un commentaire.
Votre problème est dans votre
map
opérateur:Vous avez besoin de retourner un objet n'est pas observable. Le
map
opérateur utilise l'objet comme il est et ne pas projet de le retourné observables dans les observables de la chaîne.Si vous voulez revenir
Observable.of
pour certaines raisons, vous devez utiliser leflatMap
opérateur à la place:Qui est très bien pour l'
catch
de l'opérateur, car il s'attend à une observable être retourné dans son associé de rappel.OriginalL'auteur Thierry Templier