RxJS5 - 需要帮助找出正确的流量

时间:2017-02-08 12:14:57

标签: javascript node.js rxjs rxjs5

以下是代码:



const oids = [1, 2, 3, 4, 5, 6, 7];

// func to get mongodb cursor
const getCursor = oid => mdb.content.collection.find({
  status: {
    $in: [1, 2]
  },
  oid
}, {
  _id: -1,
  oid: 1,
  description: 1,
});

// scan func to accumulate text
const accumulateText = (acc = '', post) => acc += ' ' + post.description;

// generating innerObservables
const getInnerObservable$ = oid => {
  // first, set the MongoDB cursor
  const cursor = getCursor(oid);

  return Rx.Observable
    // create an observable from cursor's data event
    .fromEvent(cursor, 'data')
    // and read until there's no more data
    .takeUntil(
      Rx.Observable.fromEvent(cursor, 'end')
    )
    // accumulate text from every document that fits the condition
    .reduce(accumulateText)
    // AFTER EVERY DOCUMENT HAD BEEN THROUGH THE SCAN
    // map the accumulated text through a word frequency count function
    .map(str => helpers.countWordFrequency(str))
    .catch(err => console.error(err));
};

const content$ = Rx.Observable
  .from(oids)
  // for each oid, get an inner observable
  .mergeMap(getInnerObservable$);


return new Promise((res, rej) => content$.subscribe({
    next: (v) => console.log(v),
    complete: () => res()
  }))
  .then(() => console.log('Done'));




基本上,我知道我的方法是错误的,但我对如何以正确的方式实施它完全感到困惑。我在代码中添加了一些注释,以帮助理解我的目标。

我正在使用RxJS5和Node 7.1.0。

感谢任何帮助和/或反馈。

编辑:我发现有一个reduce方法(编辑代码),这似乎可以完成这项工作,但最终文档开始因某些原因完全绕过它。我不知道为什么会这样。似乎在我身上存在一些根本性的误解。

EDIT2:基本上,由于某种原因,某些数据只是跳过getInnerObservable$返回的观察者上的reduce方法,并以某种方式直接跳到map方法。我仍然不知道为什么,但除此之外,它按预期工作。有任何想法吗?老实说,我完全失败了。

0 个答案:

没有答案