RxJs订阅有效,但地图没有

时间:2016-08-07 14:54:32

标签: rxjs ngrx

我有一个像这样的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)});
  }

除订阅外,没有运算符可用。为什么呢?

1 个答案:

答案 0 :(得分:0)

如果你一般都在问为什么会这样,那么这里是Andre Stalz在他博客上的解释。

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

  

因为Observable在您订阅之前是懒惰的,所以订阅会触发运算符链执行。如果你有一个do和no订阅中的console.log,那么console.log根本不会发生。

所以基本上这是运营商的典型行为。 在你的例子中,你附上了一个&#34; do&#34;运营商。没有订阅可观察到的&#34;做&#34;操作员返回它不会触发。大多数运营商都不会开火,直到运营商返回的观察点上至少有一个订阅。地图就是其中之一。

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&#34; do&#34;被执行。