类型 'Subscription' 不可分配

Type 'Subscription' is not assignable

你好,下面的代码在这个离子应用程序中对 node.js 后端上的端点执行 rest 调用,但是当我 运行 代码时 returns 出现以下错误我怎么能解决这个问题?

错误:

ERROR in src/app/services/user.service.ts(22,5): error TS2322: Type 'Subscription' is not assignable to type 'Observable<any>'.
[ng]   Property '_isScalar' is missing in type 'Subscription'

TypeScript 代码:

 //Metodo che esegue il login dell'utente
  loginService(username: string, password: string):Observable<any>
  { 
    return this.http.post(url+"/login",{"Username": username,"Password": password}).subscribe((val) => {console.log("POST call successful value returned in body",val);}, response => {  console.log("POST call in error", response); }, () => { console.log("The POST observable is now completed."); });
  }

http 调用将 return 和 Observable。您将 return 类型提到为 observable 但实际上您是从该方法订阅它的。服务方法不应该订阅。订阅应从 component 标签完成。

//Metodo che esegue il login dell'utente
loginService(username: string, password: string):Observable<any>
{ 
  return this.http.post(url+"/login",{"Username": username,"Password": password});
}

订阅/从您的组件中使用它

this.yourService.loginService('test', 'test').subscribe(
    res => console.log(res), 
    err=> console.log(err)
);

this.http.post(url+"/login",{"Username": username,"Password": password})Observable<any>
但是 return 类型的 Observable.subscribeSubscription
所以你的函数是错误的,应该是

loginService(username: string, password: string):Observable<any>
  { 
    return this.http.post(url+"/login",{"Username": username,"Password": password})
  }

class anotherClass {
    constructor(_loginService: loginService) {
        _loginService.subscribe((val) => {
            console.log("POST call successful value returned in body",val);
        }, response => {
            console.log("POST call in error", response); 
        }, () => {
            console.log("The POST observable is now completed.");
        });
    }
}

好吧,错误消息很清楚:您声明了一个可观察对象,但是 return 一个订阅。你应该简单地做

loginService (Username: string, Password: string): Observable<any> { 
    return this.http.post(url + "/login", { Username, Password });
}

如果您希望 loginService 对结果进行一些后处理,您应该在管道中使用一些 RxJS 运算符。像

return this.http.post(/* args */).pipe(
    tap(val => console.log('Success message. ', val),
    catchError(err => {
        console.error('Error message. ', err);
        return throwError(err);
    }))