import { combineLatest } from 'rxjs';
const observable_1 = get_first_observable();
const observable_2 = get_second_observable();
console.log('first log', observable_1, observable_2);
observable_1.subscribe(e => console.log('second log', e));
observable_2.subscribe(e => console.log('third log', e));
const combined = combineLatest(observable_1, observable_2);
console.log('fourth log', combined);
combined.subscribe(e => console.log('fifth log', e)); // throws TypeError warning, doesn't work我有一部分代码的表现就像上面一样,直到昨天,我才对我认为是无关的代码做了一些修改。
first log确认这两个变量确实都是Observables。
second log和third log确认每个可观测到的值至少发出一个值。
fourth log确认combineLatest()正在返回Observable类型。
fifth log从不触发,注释这一行将删除警告。在我尝试执行combined.subscribe()的任何地方,它都会引发以下TypeError警告。
TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.这里发生什么事情??我已经试过了我能想到的一切都是徒劳的。在我看来,如果我将两个有效的观测值传递给combineLatest(),并且每个可观测值都发出一个值,那么它应该会像预期的那样工作。
根据要求,这两个观测数据的来源如下:
import { BehaviorSubject } from 'rxjs';
import { distinctUntilChanged, map } from 'rxjs/operators';
const get_first_observable = () => {
const subject = new BehaviorSubject<string>(null);
// I am using subject.next(...) elsewhere
return subject.asObservable().pipe(distinctUntilChanged());
};
const get_second_observable = () => {
// where store is a redux Store
const store_subject = new BehaviorSubject(store.getState());
store.subscribe(() => {
store_subject.next(store.getState());
});
const stream = store_subject.asObservable();
const my_observable = stream.pipe(
map(state => {
return format_data(state) || [];
})
);
return my_observable;
};好的,新的更新。
这对我来说真的很奇怪,我一点也不明白,但是在get_second_observable()返回my_observable之前,我在下面的代码行中添加了一行代码,然后神奇地所有的代码都工作了。现在,如果我把这句话说回来,它就不再起作用了..那又有什么意义?我根本不把新的可以观察到的变量保存下来,也不使用它。仅仅是把它们结合起来似乎就能让它顺其自然。
combineLatest(my_observable, of(true));发布于 2019-01-16 20:33:31
改变:
import { combineLatest } from 'rxjs/internal/observable/combineLatest';至:
import { combineLatest } from 'rxjs';修正了我的错误:
TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.虽然您已经有了正确的导入,但您没有显示的代码中可能有不正确的导入。正如其他人所指出的,您所提供的代码没有明显的问题。
https://stackoverflow.com/questions/54100991
复制相似问题