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