您提供了一个无效的对象,该对象应有一个流.您可以提供一个Observable,Promise,Array或Iterable [英] You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or 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
调用,因为internalDB
和externalRequests
调用的结果只是可观察值,而不是高阶可观察值(包含可观察值的可观察值)
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屋!