RxJs订阅的作品,但地图不
我有一个NGRX店这样的: export default compose(storeLogger(), combineReducers) ({ auth: authReducer, users: userReducer });
在服务我尽量做到以下几点:RxJs订阅的作品,但地图不
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
由于观测量,直到您订阅懒惰,订阅触发操作链执行。如果在do和no订阅中有console.log,则console.log根本不会发生。
所以基本上这是操作员的典型行为。 在你的例子中,你附加了一个“do”操作符。没有订阅“do”操作符返回的observable,它不会触发。大多数运营商在运营商返回的观测值至少有一个订阅之前不会触发。地图就是其中之一。
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);
因为只有源2 “做” 执行输出为5。
另一件需要注意的事情是do或map运算符将在observable上每次发布新值时为每个订阅执行一次。所以如果你有3个订阅,并且发射了一个新值,那么这个操作员运行3次。 – wiredprogrammer
你有没有在任何地方导入适当的'rxjs/add'混合?你可以给[mcve]? – jonrsharpe
你的意思是在顶部'''import'rxjs/add/operator/do';'''? – apreg