javascript - 您在需要流的地方提供了一个无效对象。您可以提供 Observable、Promise、Array 或 Iterable

标签 javascript promise rxjs observable

假设我有以下函数引用:

const externalRequests = (params) => Rx.Observable.zip(
  externalApi1(params),
  externalApi2(params)
)

const internalDB = (params) => Rx.Observable.fromPromise(getStuffFromDB(params)

externalRequests 返回一些形状:

{ _isScalar: false,
  source: 
   { _isScalar: false,
     source: { _isScalar: false, array: [Object], scheduler: undefined },
     operator: { project: [Object] } },
  operator: undefined }

并且可以被.subscribe订阅。

internalDB,当.then直接从数据库中返回正确的数据时,当包裹在Rx.Observable.fromPromise中为上面,返回形状的东西:

{ _p: 
   { handle: 115,
     type: 'promise',
     className: 'Object',
     constructorFunction: { ref: 122 },
     protoObject: { ref: 123 },
     prototypeObject: { ref: 1 },
     status: 'pending',
     promiseValue: { ref: 1 },
     properties: [],
     internalProperties: [ [Object], [Object] ],
     text: '#<Promise>' },
  _s: {} }

,当 .subscribe 直接返回如下内容时:

{ isStopped: false,
  observer: 
   { isStopped: false,
     _onNext: [Function: val],
     _onError: [Function: val],
     _onCompleted: [Function: val] },
  m: 
   { isDisposed: false,
     current: { isDisposed: false, current: null } } }

假设我现在想将所有这些扁平化为一个流:所以我写了类似的东西:

Rx.Observable.zip(externalRequests, internalDB).mergeAll().subsribe(() => console.log('potato'))

并收到以下形式的异常: 您在需要流的地方提供了一个无效对象。您可以提供 Observable、Promise、Array 或 Iterable。

总结一下:我将 promise 转换为 Observable 的正确方法是什么,以及如何像上面那样合并/展平多个 observable?

最佳答案

正如@martin 提到的,您将函数赋予了 zip 运算符,而不是可观察对象。

您需要使用所需的 params 调用这些函数,以使您的代码正常工作。

此外,我认为您不需要 mergeAll 调用,因为 internalDBexternalRequests 调用的结果只是可观察的,而不是高阶可观察量(包含可观察量的可观察量)

Rx.Observable
  //    ▼ you need to call the functions in order to get their observables
  .zip(externalRequests(params), internalDB(params))
  .subscribe(() => console.log('potato'))

关于javascript - 您在需要流的地方提供了一个无效对象。您可以提供 Observable、Promise、Array 或 Iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633266/

相关文章:

javascript - Promise - 在多个事件后解决

javascript - 如何使用 json 响应创建另一个 URL。 Node

angular - 在 Promise 中返回 Observable

rxjs:forkJoin 是否需要至少调用 next 才能完成?

angular - take(1) 与 first()

javascript - 使 Observables 以同步和异步方式运行的方法是什么?

javascript - 在 HighCharts 上设置图标(图像)时出现问题

javascript - 为什么我的 Javascript 在本地服务器上运行时无法访问 Twitter?

javascript - 将非零长度文件推送到数组

javascript - 如何在javascript中等待动态加载的脚本完全执行?