【发布时间】:2018-04-06 12:42:46
【问题描述】:
我想在 Observable.map 函数中稍等片刻,然后返回一个值
我的代码是:
public loginRequest(userCredentials: any): Observable<TSUser | undefined> {
return this.http.post<TSUser>(this.serviceURL + '/login', userCredentials).map((response: any) => {
window.setTimeout(() => {
this.initWithCookie();
return this.principal;
}, 300);
//error TS2322: Type 'Observable<void>' is not assignable to type 'Observable<TSUser | undefined>'. Type 'void' is not assignable to type 'TSUser | undefined'.
});
};
如何使用 setTimeout 函数返回正确的 Observable 类型。使用我的代码,我得到了错误
error TS2322: Type 'Observable<void>' is not assignable to type 'Observable<TSUser | undefined>'. Type 'void' is not assignable to type 'TSUser | undefined'.
如果我这样做:
public loginRequest(userCredentials: any): Observable<TSUser | undefined> {
return this.http.post<TSUser>(this.serviceURL + '/login', userCredentials).map((response: any) => {
return Observable.timer(300).map(() => {
this.initWithCookie();
return this.principal;
}).take(1);
});
};
我得到了错误
error TS2322: Type 'Observable<Observable<TSUser | undefined>>' is not assignable to type 'Observable<TSUser | undefined>'.
解决方案 根据马丁的回答,我的工作代码是
public loginRequest(...): Observable<TSUser | undefined> {
return this.http.post<TSUser>(...).delay(300).concatMap(response => Observable.of(this.initWithCookie()));
};
(我想在执行函数中的代码之前等待 300 毫秒 )
【问题讨论】:
标签: angular rxjs angular2-observables