在 RxJS 中链接多个 flatMap 运算符时,如何摆脱 Bluebird 警告?

How do I get rid of a Bluebird warning when chaining more than one flatMap operator in RxJS?

这段代码给我这个错误

Warning: a promise was created in a handler but none were returned from it

var Observable = Rx.Observable;

var source = Observable.range(0, 3);

source
  .flatMap(item => {
    console.log('getting first promise');
    return Observable.fromPromise(
      new Promise((resolve, reject) => {
        resolve(5)
      })
    );
  })
  .flatMap(item => {
    console.log('item ==', item);
    console.log('getting second promise');
    return Observable.fromPromise(
      new Promise((resolve, reject) => {
        resolve(4)
      })
    );

  })
  .subscribe(x => console.log('sub1 == ', x));

如果我删除第二个 flatMap 运算符,我不会收到错误。为什么第二个 RxJS flatMap 运算符会导致 Bluebird 警告,而第一个 flatMap 不会?当然,我在使用 Bluebird Promises 时需要解决什么问题?

这里有一个 Plunk 演示了这个问题,您会在 Chrome 的开发者控制台

中看到警告

无法判断该消息是来自 bluebird,而不是来自 Rxjs。你可以在这里看看:https://github.com/petkaantonov/bluebird/issues/854。那里处理的问题似乎与您完全相同。

虽然这很烦人(我不记得 Promise 规范中有任何内容说你必须 return null 否则你的计算机会对你大喊大叫),但我可以在下一个 PR 修复 Rx一两天。