Angulaire 2 - Retour des données directement à partir d'une Observable
J'ai été frapper ma tête contre cette essayer de le comprendre, et aucun montant de la documentation que j'ai pu lire m'a donné une réponse à ma question.
J'ai un service qui est de parler directement à une API et le retour d'un événement observable qui dans des circonstances normales, j'aurais de s'abonner et de faire ce que je veux avec les données, mais dans un service secondaire qui utilise les requêtes du service restful, j'ai besoin d'être en mesure pour les valeurs de retour de la demande.
getSomething() {
return this._restService.addRequest('object', 'method').run()
.subscribe(
res => {
res;
},
err => {
console.error(err);
}
);
}
returnSomething() {
return this.getSomething();
}
Dans l'exemple ci-dessus, je voudrais savoir si il existe un moyen pour que je puisse retourner res
de getSomething()
dans returnSomething()
. Si ce n'est pas réalisable de cette façon, quelle est l'alternative? J'ajouterai que le _restService est assez fortement invoqué et je n'ai pas vraiment envie de commencer à jouer avec ça.
- Où en êtes-vous à l'aide de
returnSomething()
? Vous savez que c'est une opération asynchrone, donc vous ne pouvez pas obtenir le résultat immédiatement. Vous pouvez peut-être revenir le(res)
à l'intérieur de vous abonner àreturnSomething()
mais je ne sais pas si ce serait pratique. - L'exemple ci-dessus serait contenue dans un service, et l'appel à la méthode serait dans de multiples composants, c'est pourquoi je voudrais juste retour de la
res
valeur, car elle permettrait d'économiser un peu de code. J'avais aussi besoin d'être en mesure de comparer les résultats de deux ou plusieurs des méthodes similaires.
Vous devez vous connecter pour publier un commentaire.
Depuis http appels et les autres sont asynchrones, vous obtenez une
Observable
au lieu de synchrone de la valeur retournée. Abonnez-vous à elle, et dans le callback de là, vous obtenez les données. Il n'y a pas moyen de contourner cela.Une option serait de placer votre logique dans la
subscribe
appelMais la façon dont je voudrais faire c'est d'ajouter un rappel, pour injecter de la logique de l'extérieur (peut-être un composant, peut-être un autre service):
Et dans votre composant ou de l'endroit où:
Je n'ai pas utilisé moi-même, mais je crois qu'il devrait en théorie (:
Vérifier sujet docs pour plus d'info. Vous pouvez utiliser différents types de sujet, par exemple BehaviorSubject a
value
de la propriété, vous pouvez accéder à...Voici la travail plunker...
.filter(Boolean)
avant de souscrire à l'observable...J'ai eu un problème similaire. Ma solution a été de convertir les observables dans la promesse de .toPromise() (et utiliser asynchrone - vous attendent pour de le retourner et de voir les erreurs). Vous pouvez convertir votre code dans quelque chose comme:
JS: