如何解析另一个Observable中的Observable? - rxjs

jha*_*amm 6 javascript rxjs

我有一个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随后用于resres2第二个promise中返回的结果合并.

还要注意,这fromPromise是一个冷的观察.这意味着您必须订阅才能启动.在你的情况下,我认为你已经有这样的事情:

someFunction = () => {
  return Rx.Observable.fromPromise(axios(config))
     ...
     ...
}

someFunction.subscribe((data) => console.log(data));
Run Code Online (Sandbox Code Playgroud)