运行 两个承诺相同的参数

Run two promises that the same parameter

我正在玩弄 Rx.js 我正在寻找 运行 两个承诺,一个创建目录,一个发出 http 请求,两者都采用一个参数 user.我如何将这两件事联系在一起?

const GITHUB_USER = 'reggi'

let repos = Rx.Observable.just(GITHUB_USER)
  .map(user => {
    return createDir(user)
  })
  .map(user => {
    return getRepos(user)
  })

可以做的是稍微作弊:

let repos = Rx.Observable.just(GITHUB_USER)
  .map(user => {
    return createDir(user).then(res_cd => { 
      return getRepos(user);
    });
  })
  .then(res => {...})

这并不理想,但它会起作用。

flatMap 运算符允许您 'flatten' Promises 的 Observable(即将解析某些内容的 Promises 流转换为已解析数据流):

const GITHUB_USER = 'reggi'

// repos$ is a stream that will resolve the user's repositories
// once the directory is created.
let repos$ = Rx.Observable.just(GITHUB_USER)
  .flatMap(user => {
    // Return a Promise that resolves the user
    return createDir(user).then(() => user);
  })
  .flatMap(user => {
    // Return a Promise that resolves the repos
    return getRepos(user)
  });