您提供了一个无效的对象,该对象应有一个流.您可以提供一个Observable,Promise,Array或Iterable [英] You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable

查看:96
本文介绍了您提供了一个无效的对象,该对象应有一个流.您可以提供一个Observable,Promise,Array或Iterable的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我有以下函数引用:

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

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

externalRequests返回以下形状:

externalRequests returns something of the shape:

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

,并且可以.subscribe使用.

internalDB,当.then直接从数据库中返回正确的数据时,并按上述包装在Rx.Observable.fromPromise中时,返回以下形状:

internalDB, when .then'd directly returns the right data from the database, and when wrapped in Rx.Observable.fromPromise as above, returns something of the shape:

{ _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直接返回以下内容时:

, which, when .subscribe'd directly returns something like so:

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

说,我现在想将所有这些压缩到一个流中:所以我写类似:

Say I now want to flatten all of this into a single stream: so I write something like:

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

并收到以下形式的异常: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

And receive an exception of the form: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

总结:我兑现诺言作为可观察对象的正确方法是什么?如何如上所述合并/展平多个可观察对象?

To summarize: What is the correct way for me to cast my promise as an Observable, and how do I merge/flatten multiple observables as above?

推荐答案

如@martin所述,您将函数提供给zip运算符,而不是可观察的函数.

As @martin mentioned you give functions to the zip operator, not observables.

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

You need to call those functions with the needed params for your code to work.

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

Also, I don't think you need the mergeAll call, as the result of internalDB and externalRequests calls are only observables, not higher order observables (observables containing observables)

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

这篇关于您提供了一个无效的对象,该对象应有一个流.您可以提供一个Observable,Promise,Array或Iterable的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆