获取消息说该函数的类型为void

时间:2018-02-15 03:00:20

标签: angular typescript

我是棱角分明的新手,还有任何尝试为我正在进行的离子项目设置我的授权模块。

我越来越接近了,但是我遇到了一个问题,即使用了#aut;'我创建的服务。

我有一个使用以下登录方法的auth.service:

  login(user){
    this.http.post(this.API_ENDPOINT+'/authenticate', user)
    .map(res => res.json())
    .subscribe(user => {
        this.storeUserCredentials(user); 
        return user;
    })
  }

在我的login.ts组件中,当我调用方法时:

  constructor(public navCtrl: NavController, public navParams: NavParams, private auth: AuthenticationProvider) {
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad LoginPage');
  }

  userLogin(f){
    this.auth.login(f.value)
      .subscribe(response => {
      this.navCtrl.push('TabsPage');
    })
  }

}

我在' .subscribe'下面有一条红线。出现以下错误:

[ts] Property 'subscribe' does not exist on type 'void'.
any

我应该提一下,我的目标是点击身份验证端点,然后处理" storeUserCredentials(),然后导航到标签页。

1 个答案:

答案 0 :(得分:1)

这是TypeScript错误。这表明存在人为错误。 login方法不返回任何内容(void类型),但预计会返回具有subscribe方法的可观察对象。

在这种情况下,在login中调用订阅是不可接受的,因为订阅应该在方法之外进行。

如果storeUserCredentials是同步副作用,可以使用do运算符处理:

  login(user){
    this.http.post(this.API_ENDPOINT+'/authenticate', user)
    .map(res => res.json())
    .do(user => {
        this.storeUserCredentials(user); 
    })
  }