Angular2 - 'then'在'void'类型中不存在

And*_*rit 6 typescript angular

我尝试简单的应用程序,我点击删除按钮后删除用户.

当我尝试像这样运行服务器时,我thendeleteUser() 组件中遇到错误:

 deleteUser(user: User, event: any) {
    event.stopPropagation();
    this.userService
      .deleteUser(user)
      .then(res => {
        this.httpUsers = this.httpUsers.filter(h => h !== user);
        if (this.selectedUser === user) { this.selectedUser = null; }
      })
      .catch(error => this.error = error);
  }
Run Code Online (Sandbox Code Playgroud)

服务:

  deleteUser(user: User) {
    console.log('Deleting user');
  }
Run Code Online (Sandbox Code Playgroud)

错误信息:

app/users.component.ts(46,8):错误TS2339:类型'void'上不存在属性'then'.

错误的第46行是上面的第46行 .then(res => {

谷歌搜索时我发现了这个问题所以我从deleteUser函数中删除了void,但是没有任何改变.

什么提示我做错了什么?

ras*_*mnb 5

你必须调用delete方法,所以它将返回promise,你可以使用.then(你必须这样做

deleteUser(user: User) {
   return this.http.delete(url+id,...).toPromise();
}
Run Code Online (Sandbox Code Playgroud)


Sac*_*San 5

如果您要退回承诺,则可以使用.如果要调用REST API然后映射结果,则可以使用subscribe

然后使用

服务方式

  getAudits() {
    // console.log('audits' + amplify.store('audits'));
    let audits: Audit[] = amplify.store('audits'));    
    return Promise.resolve(audits);
  }
Run Code Online (Sandbox Code Playgroud)

零件

this.auditService.getAudits().then(audits => {
  this.audits = audits;
  this.updateChart(true);
});
Run Code Online (Sandbox Code Playgroud)

使用订阅

服务方式

  getAudits() {
    return this.http.get('/rest/batch').map(res => res.json());
  }
Run Code Online (Sandbox Code Playgroud)

零件

this.auditService.getAudits().subscribe(audits => {
  this.audits = audits;
  this.updateChart(true);
});
Run Code Online (Sandbox Code Playgroud)