如果订阅了运算符返回的可观察对象,为什么原始可观察对象会发出值?

Why does the origin observable emits values, if an observable returned by an operator gets subscribed?

需要订阅一个冷的可观察对象来发出值。 当使用诸如 map 之类的运算符时,将返回一个新的可观察对象。

const origin$ = Rx.Observable.from([1,2,3,4]);
const mapped$ = origin$.map(val => val+1);
mapped$.subscribe(console.log);

使用 .subscribe mapped$ observable 值被发出并记录在控制台中。

但是在这种情况下,mapped$ observable 被订阅了,而不是 origin$ observable。为什么 origin$ observable 开始发出值?

使用任何运算符(老式的 .map() 或现在的 .pipe(map()))都不是 return 订阅。相反,它 return 是一个 new observable,它将另一个 observable 作为源,但等待任何订阅,直到它有订阅。