正常订阅函数声明的函数替换出错 打字错误 我只想在Angular应用程序中服务器的每个成功响应中重用该函数,而不是在每个块中声明它

正常订阅函数声明的函数替换出错 打字错误 我只想在Angular应用程序中服务器的每个成功响应中重用该函数,而不是在每个块中声明它,angular,typescript,Angular,Typescript,以下是导致错误的代码 @Injectable({ providedIn: "root" }) export class AuthService { ..... .... addUser(){ this.http.post<any>(API_ENDPOINT, postData) .subscribe( //response when success this.registerDone,

以下是导致错误的代码


@Injectable({ providedIn: "root" })
export class AuthService {
.....
....

addUser(){
 this.http.post<any>(API_ENDPOINT, postData)
            .subscribe( 
               //response when success
               this.registerDone,
               //error
               (err) => {
                    console.log(err);
                    this.authStatusListener.next(false);
                }
          );
}
private registerDone(res:any){
        this.clearAuthData();
          .... 
          ....
    }

private clearAuthData() {
        localStorage.removeItem("userInfo");
}

}

  • 丑陋的解决方法是将registerDone函数块的所有内容放入(res)=>{}或

  • 因为我将在其他成功响应函数中重用registerDone(res:any)。以干净简单的方式使用此函数,而不是在每个块中重新声明,这将是一件好事

编辑后的:(res)=>{registerDone(res)}可以工作,但不确定使用registerDone作为输入函数有什么区别,因为它也接受一个参数作为函数。

试试这个

export class AuthService {
.....
....

addUser(){
 this.http.post<any>(API_ENDPOINT, postData)
            .subscribe( 
               //response when success
               () => this.registerDone(),
               //error
               (err) => {
                    console.log(err);
                    this.authStatusListener.next(false);
                }
          );
}
private registerDone(res:any){
        this.clearAuthData();
          .... 
          ....
    }

private clearAuthData() {
        localStorage.removeItem("userInfo");
}

}
导出类身份验证服务{
.....
....
addUser(){

this.http.post了解更多详细信息。

在post api subscribe上,您调用了函数registerDone,但出现了一些语法错误,您错过了圆括号,必须将
this.registerDone
替换为
()=>this.registerDone()
。很抱歉,这也不起作用。首先将
this.clearAuthData()
更改为
clearAuthData()
registerDone
函数中。然后将
this.registerDone
更改为subscribeThank@jbnize中的
registerDone
,这样做行得通,但我想知道为什么不能使用registerDone?实际上我希望将响应作为参数向下传递,因此它应该是(res)=>this.registerDone(res)和私人注册电话(res:any)
export class AuthService {
.....
....

addUser(){
 this.http.post<any>(API_ENDPOINT, postData)
            .subscribe( 
               //response when success
               () => this.registerDone(),
               //error
               (err) => {
                    console.log(err);
                    this.authStatusListener.next(false);
                }
          );
}
private registerDone(res:any){
        this.clearAuthData();
          .... 
          ....
    }

private clearAuthData() {
        localStorage.removeItem("userInfo");
}

}