RxJs subscribe 有效但 map 无效

RxJs subscribe works but map does not

我有一个这样的 ngrx 商店: export default compose(storeLogger(), combineReducers) ({ auth: authReducer, users: userReducer }); 在一项服务中,我尝试执行以下操作:

import 'rxjs/add/operator/do';
@Injectable()
export class ApiService {

  constructor(private _http: Http, private _store: Store<AppState>, private _updates$: StateUpdates<AppState>) {
     _store.select<Auth>('auth').do(_ => {console.log("token:" +_.token)});
  }

除了订阅外,没有运营商工作。为什么?

如果您一般询问为什么会发生这种情况,那么这里是 Andre Stalz 在他的博客上的解释。

http://staltz.com/how-to-debug-rxjs-code.html

Because Observables are lazy until you subscribe, a subscription triggers the operator chain to execute. If you have the console.log inside a do and no subscription, the console.log will not happen at all.

所以基本上这是运营商的典型行为。 在您的示例中,您附加了一个 "do" 运算符。没有订阅 "do" 运算符 returns 的可观察对象,它不会触发。在可观察到的运算符 returns 上至少有一个订阅之前,大多数运算符都不会触发。地图就是其中之一。

http://jsbin.com/bosobuj/edit?html,js,console,output

var source = new Rx.BehaviorSubject(3);
source.do(x=>console.log(x));

var source2 = new Rx.BehaviorSubject(5);
source2.do(x=>console.log(x)).subscribe(x=> x);

输出为 5 因为只执行了 source2 "do"。