我有一个像这样的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)});
}
除订阅外,没有运算符可用。为什么呢?
答案 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;被执行。