可观察对象返回类型

3

我正在向API发送请求,并使用map函数对其进行解析:

//part of service
post(url: string, params): Observable<Response> {
    let requestUrl: string = this.apiUrl + url;
    return this.http.post(requestUrl, params)
        .map(response => response.json());
}
    
//part of other service
doLogin(login, haslo): Observable<Response> {
    return this.apiService.post('auth/login/', {login: login, haslo: haslo});
}

作为结果,我会得到一个布尔值并在订阅函数中使用它。
this.authService.doLogin(this.model.login, this.model.haslo)
    .subscribe(result => {
        //result is boolean - not Response
        this.authService.loggedIn = result;
        this.result = result
    });

问题在于doLogin的订阅者中,TypeScript指出结果是Response而不是boolean - 我该如何解决这个问题?

1个回答

5

这是由于函数原型:

post(url: string, params): Observable<Response>

doLogin(login, haslo): Observable<Response>

它们应该是:

Observable<boolean>

像这样操作:

//part of service
post(url: string, params): Observable<any> {
    let requestUrl: string = this.apiUrl + url;
    return this.http.post(requestUrl, params)
        .map(response => response.json());
}

//part of other service
doLogin(login, haslo): Observable<boolean> {
    return this.apiService.post('auth/login/', {login: login, haslo: haslo})
       .map(result => result == true /* or any check here and return an BOOLEAN !!*/);
}

但这并不总是正确的。Post方法将结果转换为json(可以是任何数据),因此它应该是Observable<Object>,而doLogin可以是Observable<boolean>,但typescript不同意-它必须是Object。最终,result是Object而不是boolean :/ - piernik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接