2016-03-08 2 views
1

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

Это очень и очень похож на [Как получить доступ к предыдущим результатам обещание в '.then() 'chain?] (http://stackoverflow.com/q/28250680/1048572). Тем более, что ваши наблюдаемые, похоже, ведут себя как обещания (единственный результат). – Bergi

ответ

1

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

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

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

1

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