我将指定泛型类型T作为此方法的返回值时出现语法错误:
private getResource<T>(resource: string, pagination?: string): T {
this.updateSessionToken();
const url = this.buildUrl(resource, pagination);
this.http
.get<T>(url, {headers: this.headers, observe: 'response'})
.retry(3)
.subscribe(
(response) => {
return response;
},
(error: HttpErrorResponse) => {
return error;
}
);
}
什么是避免使用any或void作为tslint的以下建议:
答案 0 :(得分:1)
如果定义的返回值既不是void也不是任何(也允许返回void),则必须在任何返回路径中返回一个值。
您的getResource
函数永远不会返回任何值,因为它没有返回语句。
您定义返回值的唯一位置是另一个嵌套的lambda函数,正如语法(arg1,arg2,...) => {...}
所暗示的那样。因此,在这个嵌套函数的主体内写一个return语句不会返回外部函数的值,正如您可能尝试的那样。此外,http.get
函数是异步的,这意味着您发送请求并继续读取函数代码,而不是在等待响应时被阻塞,并且由于该函数没有下一行,您退出函数没有返回任何值。
看起来您的体系结构可能是错误的,因为在异步编程中您不应该期望立即响应,而是将后续操作作为成功的lambda提供(而不是返回响应,以在该函数之外使用它的方式使用它) ,对于失败函数也一样。
我建议你多阅读一下异步请求的主题,因为它是Web开发的一个主要原则,并建议你在Angular中专门阅读Observer(它基本上与Promise的概念相同)。 / p>