从同步值和异步值创建数组

Create an array from sync and async values

下面的代码工作得很好。控制台输出一个数组[1, 2]

const getAsyncValue = () => {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(1);
    }, 1000)
  })
}
const getSyncValue = () => {
  return Rx.Observable.of(2);
}
const observer = (arrayOfValues) => {
  console.log(arrayOfValues);
}
Rx.Observable.of(getPromise(), getSyncValue())
  .concatAll()
  .toArray()
  .subscribe(observer)

我想将函数 getSyncFunction 更改为以下内容(因为在现实世界的应用程序中,此函数可能没有对 RxJs 库的引用):

const getSyncValue = () => {
  return 2;
}

如果我只这样做而不做任何其他事情,我会得到一个错误:

You provided '2' where a stream was expected

我还需要对代码进行哪些其他更改?也许提示我要使用的运算符。

问题不在 getSyncValue() 中,而是在与 higher-order Observables 一起工作的 concatAll() 中。当您仅传递 2 时,它会抛出错误。使用 Rx.Observable.of(2) 是正确的,因为它是一个发出单个值 2 的 Observable,该值由 concatAll().

发送

我不知道你的代码应该做什么,但你可以这样做,例如:

Rx.Observable.of(getPromise(), getSyncValue())
  .map(v => typeof(v) == 'object' ? v : Rx.Observable.of(v))
  .concatAll()
  ...

但是,我确实建议重新考虑这一点,因为我猜你可以使用比这更简单的方法。