我有一个Observable我消耗另一个可观察的,但第二个Observable我无法解决.这是代码:
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',
}));
}
Run Code Online (Sandbox Code Playgroud)
该getMe函数返回一个Observable,但它永远不会被解析.我试图添加一个flatMap和一个concat,但它仍然没有解决.我该getMe如何解决?
小智 8
您是否尝试过以下(也未经测试):
function getMe(accessToken) {
return Rx.Observable.fromPromise(axios.get({
url: 'https://api.spotify.com/v1/me',
}));
}
Rx.Observable.fromPromise(axios(config))
.map((res) => {
return {
accessToken: res.data.access_token,
refreshToken: res.data.refresh_token
}
})
.flatMap((res) => {
return getMe(res.accessToken).map((res2) => {
res.me = res2;
return res;
}
})
.subscribe((data) => console.log(data));
Run Code Online (Sandbox Code Playgroud)
如上文所述,flatMap返回一个可观察的.map随后用于res与res2第二个promise中返回的结果合并.
还要注意,这fromPromise是一个冷的观察.这意味着您必须订阅才能启动.在你的情况下,我认为你已经有这样的事情:
someFunction = () => {
return Rx.Observable.fromPromise(axios(config))
...
...
}
someFunction.subscribe((data) => console.log(data));
Run Code Online (Sandbox Code Playgroud)