说我有以下功能参考:
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
'd直接从数据库返回正确的数据时,如果包含在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'))
并收到表格的例外情况:
You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
总结一下:将我的承诺作为Observable投出的正确方法是什么,以及如何合并/展平多个observable如上所述?
答案 0 :(得分:1)
正如@martin所提到的,你给zip
运算符赋予了函数,而不是可观察函数。
您需要使用所需的params
调用这些函数才能使代码正常工作。
另外,我认为您不需要mergeAll
调用,因为internalDB
和externalRequests
调用的结果只是可观察的,而不是更高阶的可观察量(包含可观察量的可观察量) )
Rx.Observable
// ▼ you need to call the functions in order to get their observables
.zip(externalRequests(params), internalDB(params))
.subscribe(() => console.log('potato'))
答案 1 :(得分:1)
通常是因为您从'rxjs / operators'导入了zip
您应该从“ rxjs / observable”导入zip
答案 2 :(得分:0)
我这样导入文件的错误...
import {loginEpic} from "./Epic";
和 我只是像这样纠正...
import loginEpic from "./Epic";