类型 '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.subscribe
是 Subscription
所以你的函数是错误的,应该是
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);
}))
你好,下面的代码在这个离子应用程序中对 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.subscribe
是 Subscription
所以你的函数是错误的,应该是
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);
}))