我想在可观察的范围内稍等一下。映射函数,然后返回值
我的代码是:
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函数返回正确的可观察类型。用我的代码我得到了错误
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>'.
解决方案
根据martin的回答,我的工作代码是
public loginRequest(...): Observable<TSUser | undefined> {
return this.http.post<TSUser>(...).delay(300).concatMap(response => Observable.of(this.initWithCookie()));
};
(我想等300毫秒
之前
我在函数中执行代码)