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"。
我有一个这样的 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"。