【问题标题】:Create an array from sync and async values从同步和异步值创建一个数组
【发布时间】:2017-01-19 12:02:25
【问题描述】:

下面的代码运行良好。控制台输出一个数组[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”

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

【问题讨论】:

    标签: javascript rxjs rxjs5


    【解决方案1】:

    问题不在于getSyncValue(),而在于concatAll(),它适用于高阶 Observables。当您仅通过2 时,它会引发错误。使用Rx.Observable.of(2) 是正确的,因为它是一个发出单个值2 的Observable,由concatAll() 发出。

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

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

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

    【讨论】:

    • 我猜你是对的。我应该重新考虑这一点。无论如何,谢谢您,好先生,您的时间和知识!
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2021-03-20
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2021-03-29
    相关资源
    最近更新 更多