Ich habe eine Observable
in der ich eine andere beobachtbare konsumiere, aber die 2. Observable
kann ich nicht lösen. Hier ist der Code:Wie kann ich ein Observable innerhalb eines anderen Observable auflösen? - rxjs
return Observable.fromPromise(axios(config))
.map(res => {
return {
accessToken: res.data.access_token,
refreshToken: res.data.refresh_token
}
})
.map(res => {
return {
me: getMe(res.accessToken),
accessToken: res.accessToken,
refreshToken: res.refreshToken
}
})
function getMe(accessToken) {
return Observable.fromPromise(axios.get({
url: 'https://api.spotify.com/v1/me',
}));
}
Die getMe
Funktion gibt einen Observable
, aber es wird nie gelöst. Ich habe versucht, eine flatMap
und eine concat
hinzuzufügen, aber es ist immer noch nicht gelöst. Wie bekomme ich die getMe
zu lösen?
Interessanter Vorschlag. Könnte wertvoll sein, um es zu testen. Meiner Meinung nach besteht ein mögliches Problem darin, auf "res" von der Schließung zuzugreifen. Ich bin mir da nicht sicher, aber die anonyme Funktion mit 'res.Ich werde in seinem Körper nur dann ausgeführt/evaluiert, wenn "getMe" einen Wert ausgibt. Zu diesem Zeitpunkt frage ich mich, ob die Variable "res" noch ihren Wert behält. Ich kodiere das defensiv um dies herum, indem ich nur reine Funktionen in Verbindung mit Observablen verwende. Ich bin also interessiert zu wissen, ob ich zu vorsichtig bin. – user3743222
Aus der Perspektive eines Abschlusses wird 'res' immer noch seinen Wert behalten (ich habe diese Technik schon einmal benutzt). Ich stimme zu, dass es am besten ist, einen defensiven Stil zu haben und gründlich zu testen. Als eine Randnotiz, wenn es eine zweite 'Rx.Observable.fromPromise (axios (config))' Ausführung vor 'getMe()' verrechnet, dann haben Sie 2 Abo-Ausführungen. Dies kann leicht mit 'flatMapLatest' behoben werden, wodurch sichergestellt wird, dass Sie immer die letzte 'getMe()' Antwort mit einer Subskriptionsausführung erhalten. – Jeremy
fair genug. Danke für die Klarstellung. – user3743222