是否有可能在通过运算符转换之前获得可观察性?
Is it possible to get observable before transformation via operator?
可以吗?
更详细的问题
我有这样的东西:
const source = Rx.Observable.interval(500);
const transformed = source.mergeMap(() => Rx.Observable.timer(100));
transformed
observable 是 new observable,它没有连接到初始 observable source
(我无法通过 transformed
访问它,如我所想)。是否有可能在使用运算符转换后以某种方式获得 initial(在运算符应用之前)可观察?
我的情况
代码:
@AppendLoader()
@Effect()
getFriends$: Observable<Action> = this.actions$
.ofType(friendsActions.GET_FRIENDS)
.switchMap(() => {
return this.friendsService.getFriends()
.map((data: any) => new friendsActions.GetFriendsSuccessAction(data))
.catch(() => of(new friendsActions.GetFriendsFailureAction()));
});
和 AppendLoader:
function AppendLoader() {
return function (target: any, propertyKey: string) {
let observable: any = null;
Object.defineProperty(target, propertyKey, {
configurable: true,
enumerable: true,
get: () => {
console.log('get');
return observable;
},
set: (newObservable) => {
console.log('set', newObservable);
observable = newObservable;
observable
.subscribe((action: any) => {
console.log(action);
});
}
});
};
}
我在那里有三个可观察值:
this.actions$
(所有操作)
- 创建自 this.action$
this.action$.ofType(friendsActions.GET_FRIENDS)
(friendsActions.GET_FRIENDS
类型的可观察对象)
- 第三个可观察值(第 2 个和
switchMap
应用于它)(GetFriendsSuccessAction
/GetFriendsFailureAction
的可观察值)
我只能访问装饰器中的第三个 observable,因为这个 observable 在 getFriends$
属性.
我想在 AppendLoader 装饰器中做一些动作。我想订阅列表中的第二个可观察对象,当发出值时,我想显示加载微调器(例如 showLoader()
)。我想订阅第三个可观察对象,当发出 success/failure 值时,我想隐藏加载微调器。
我简单地检查了 RxJs5 源代码似乎是不可能的。
但对于您的情况,您可以执行以下操作:
创建新的可观察对象'forDecoratror$':
second$ = this.actions$.ofType(friendsActions.GET_FRIENDS)
getFriends$ = second$.switchMap(() => {...});
forDecoratror$ = Observable.Merge(second$.mapTo("2nd"), getFriends$)
装饰器在“2nd”出现时调用 showloader()
记住一切都是流:-)
可以吗?
更详细的问题
我有这样的东西:
const source = Rx.Observable.interval(500);
const transformed = source.mergeMap(() => Rx.Observable.timer(100));
transformed
observable 是 new observable,它没有连接到初始 observable source
(我无法通过 transformed
访问它,如我所想)。是否有可能在使用运算符转换后以某种方式获得 initial(在运算符应用之前)可观察?
我的情况
代码:
@AppendLoader()
@Effect()
getFriends$: Observable<Action> = this.actions$
.ofType(friendsActions.GET_FRIENDS)
.switchMap(() => {
return this.friendsService.getFriends()
.map((data: any) => new friendsActions.GetFriendsSuccessAction(data))
.catch(() => of(new friendsActions.GetFriendsFailureAction()));
});
和 AppendLoader:
function AppendLoader() {
return function (target: any, propertyKey: string) {
let observable: any = null;
Object.defineProperty(target, propertyKey, {
configurable: true,
enumerable: true,
get: () => {
console.log('get');
return observable;
},
set: (newObservable) => {
console.log('set', newObservable);
observable = newObservable;
observable
.subscribe((action: any) => {
console.log(action);
});
}
});
};
}
我在那里有三个可观察值:
this.actions$
(所有操作)- 创建自 this.action$
this.action$.ofType(friendsActions.GET_FRIENDS)
(friendsActions.GET_FRIENDS
类型的可观察对象) - 第三个可观察值(第 2 个和
switchMap
应用于它)(GetFriendsSuccessAction
/GetFriendsFailureAction
的可观察值)
我只能访问装饰器中的第三个 observable,因为这个 observable 在 getFriends$
属性.
我想在 AppendLoader 装饰器中做一些动作。我想订阅列表中的第二个可观察对象,当发出值时,我想显示加载微调器(例如 showLoader()
)。我想订阅第三个可观察对象,当发出 success/failure 值时,我想隐藏加载微调器。
我简单地检查了 RxJs5 源代码似乎是不可能的。 但对于您的情况,您可以执行以下操作:
创建新的可观察对象'forDecoratror$':
second$ = this.actions$.ofType(friendsActions.GET_FRIENDS) getFriends$ = second$.switchMap(() => {...}); forDecoratror$ = Observable.Merge(second$.mapTo("2nd"), getFriends$)
装饰器在“2nd”出现时调用 showloader()
记住一切都是流:-)