稍后在链中访问变量

时间:2016-03-08 18:51:18

标签: javascript rxjs reactive-extensions-js

在下面的示例中,我引导用户并为该用户创建目录。我想简单地将用户记录为已创建。什么是在链后期访问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}`))

我想做类似的事情:

SELECT t1.Barcode, SUM(t1.Date - t2.Date)
FROM TheTable t1
JOIN TheTable t2 ON t1.Barcode=t2.Barcode
AND t1.Code = 'Redemption'
AND t2.Code = 'Sale'
GROUP BY Barcode

2 个答案:

答案 0 :(得分:1)

你可以用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));

如果用户没有根据您的需要更改每个请求,您可以使用最新的或最新的组合。

答案 1 :(得分: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))