Доступ к переменным позже в цепочке

В приведенном ниже примере я беру пользователя и создаю каталог для этого пользователя. Я хочу просто войти, что пользователь был создан. Какой лучший способ получить доступ к 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}`))

2 ответа

Решение

Вы можете сделать что-то подобное с zip, так как zip будет возвращать новый объект только тогда, когда у него есть все новые данные.

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));

если пользователь не меняется с каждым запросом, вы можете использовать последний из или объединить последний в зависимости от ваших потребностей.

Вы можете создать замыкание для хранения пользователя, а затем использовать 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))
Другие вопросы по тегам