Mam Observable
, w którym konsumuję kolejne obserwowalne, ale drugie Observable
nie mogę rozwiązać. Oto kod:Jak rozwiązać problem z obserwowalności wewnątrz innego obserwowalnego? - 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',
}));
}
Funkcja getMe
zwraca Observable
, ale nigdy nie został rozwiązany. Próbowałem dodać flatMap
i concat
, ale nadal nie został rozwiązany. Jak mogę rozwiązać problem z getMe
?
Interesująca propozycja. Może być wartościowy, aby go przetestować. Moim zdaniem możliwym problemem jest uzyskanie dostępu do 'res' z zamknięcia. Nie jestem tego pewien, ale anonimowa funkcja z 'res.ja 'w jego ciele, jest wykonywany/oceniany tylko wtedy, gdy' getMe' emituje wartość, w którym to momencie zastanawiam się, czy zmienna 'res' nadal utrzymuje swoją wartość. Koduję to defensywnie, używając wyłącznie czystych funkcji w połączeniu z obserwowalnymi. Więc chciałbym wiedzieć, czy jestem zbyt ostrożny. – user3743222
Z perspektywy zamknięcia 'res' nadal będzie utrzymywał jego wartość (wcześniej użyłem tej techniki). Zgadzam się, że najlepiej jest mieć defensywny styl kodowania i dokładnie przetestować. Na marginesie, jeśli pojawi się drugie wykonanie 'Rx.Observable.fromPromise (axios (config))' zanim rozwiąże się 'getMe()', będziesz miał 2 egzekucje z subskrypcji. Można to łatwo naprawić za pomocą 'flatMapLatest', która zapewni, że zawsze otrzymasz najnowszą odpowiedź' getMe() 'z jednym wykonaniem subskrypcji. – Jeremy
wystarczająco fair. Dziękuję za wyjaśnienie. – user3743222