访问链中后面的变量

Access variables later in the chain

在下面的示例中,我获取了一个用户并为该用户创建了一个目录。我只想记录创建的用户。在链的后面访问 user 变量的最佳方法是什么?

let ensureUser$ = ghUser$
  .map(u => Rx.Observable.fromPromise(createDir(u)))
  .flatMapLatest(x => x)
  .do(() => debug('created user dir'))

我想做这样的事情:

let ensureUser$ = ghUser$
  .map(u => Rx.Observable.fromPromise(createDir(u)))
  .flatMapLatest(x => x)
  .do(() => debug(`created user dir ${u}`))

你可以用 zip 做这样的事情,因为 zip 只会 returns 一个新对象,当它有所有新数据时。

const user$ = Rx.Observable.just('ed')
const returnedArrary$ = user$.map(u=>[u]);

const source = Rx.Observable.zip(
    user$,
    returnedArrary$
  )
 .do(u=>console.log(`created user dir ${u[0]}`))
 .subscribe((x)=>console.log(x));

如果用户不会随每个请求而改变,您可以根据需要使用 LatestFrom 或 combineLatest。

您可以创建一个闭包来存储用户,然后使用 flatMapLatest 发出用户和目录结果:

let ensureUser$ = ghUser$
  .flatMapLatest(user => {
      return Rx.Observable.fromPromise(createDir(u))
           // Emit the directory and user information
           .map(directory => ({ directory, user }));
  })
  .do((x) => debug('created', x))