从同步和异步值创建数组

时间:2017-01-19 12:02:25

标签: javascript rxjs rxjs5

下面的代码工作得很好。控制台输出数组[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;
}

如果我在没有任何其他情况下这样做,我会收到错误:

  

您提供了“2”,其中包含预期的流

我需要对代码进行哪些其他更改?也许提示我操作员使用。

1 个答案:

答案 0 :(得分:3)

问题不在getSyncValue()中,而在concatAll()中适用于高阶Observable。当你只传递它2时,它会抛出错误。使用Rx.Observable.of(2)是正确的,因为它是一个Observable,它会发出一个由2汇出的值concatAll()

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

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

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