Angular2:为xhr调用创建通用加载程序服务
我正在尝试使用angular2构建一个具有更多可重用组件的小应用程序。在这里,我想要一个加载程序服务,它在每次xhr调用时都会执行 这就是我想到的Angular2:为xhr调用创建通用加载程序服务,angular,typescript,rxjs,Angular,Typescript,Rxjs,我正在尝试使用angular2构建一个具有更多可重用组件的小应用程序。在这里,我想要一个加载程序服务,它在每次xhr调用时都会执行 这就是我想到的 使用承诺 export class SpinnerService { showSpinner = false; spinnerPromise(observableToWaitFor: Observable<any>, text?: string): Promise<any> { this.s
export class SpinnerService {
showSpinner = false;
spinnerPromise(observableToWaitFor: Observable<any>, text?: string): Promise<any> {
this.showSpinner = true;
return promiseToWaitFor.toPromise()
.then((data) => { this.showSpinner = false; return data; });
}
}
在某种程度上它还可以工作。但是我不太相信这种用法,因为它限制了AuthService使用Promise@Injectable()
export class SpinnerService {
showSpinner = false;
public consumer: ReplaySubject<any> = new ReplaySubject(1);
spinnerPromise(observableToWaitFor: Observable<any>, text?: string) {
this.showSpinner = true;
return observableToWaitFor.subscribe(
response => this.consumer.next(response),
error => { this.showSpinner = false; },
() => { this.showSpinner = false; }
);
}
}
@Injectable()
出口级喷丝板服务{
showSpinner=false;
公共消费者:ReplaySubject=新ReplaySubject(1);
喷丝头承诺(observableToWaitFor:Observable,文本?:字符串){
this.showSpinner=true;
返回observableToWaitFor.subscribe(
response=>this.consumer.next(响应),
错误=>{this.showSpinner=false;},
()=>{this.showSpinner=false;}
);
}
}
这将返回订阅。但是有没有一种方法可以在不订阅showSpinner的情况下更新showSpinner最终让它工作了..我要做的唯一改变就是像这样使用
最终
export class SpinnerService {
showSpinner = false;
spinnerPromise(observableToWaitFor: Observable<any>, text?: string) {
this.showSpinner = true;
return observableToWaitFor.finally(() => this.showSpinner = false);
}
}
出口级喷丝板服务{
showSpinner=false;
喷丝头承诺(observableToWaitFor:Observable,文本?:字符串){
this.showSpinner=true;
返回observeToWaitFor.finally(()=>this.showSpinner=false);
}
}
您可以使用.do()
来执行副作用,但这假设您稍后仍将订阅可观察对象。@martin如果api调用失败,.do()还会执行吗?do()
需要三次回调。对于下一步
,错误
和完成
发出信号,以便您可以选择要处理的内容。您可以创建一个自定义的通用组件,而不是将其作为服务来创建,就像在这个@Aravind中一样,我已经有了一个组件SpinnerComponent,它与这个SpinnerService交互,该SpinnerService显示/隐藏加载程序。
export class SpinnerService {
showSpinner = false;
spinnerPromise(observableToWaitFor: Observable<any>, text?: string) {
this.showSpinner = true;
return observableToWaitFor.finally(() => this.showSpinner = false);
}
}