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

时间:2016-08-24 14:22:15

标签: angular typescript

我尝试使用简单的应用程序,在单击删除按钮后删除用户。

当我尝试像这样运行服务器时,我在then的{​​{1}}收到错误 成分:

deleteUser()

服务:

 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);
  }

错误讯息:

  

app / users.component.ts(46,8):错误TS2339:属性'然后'没有   存在于'void'类型。

错误的第46行是 deleteUser(user: User) { console.log('Deleting user'); }

以上的第46行

谷歌搜索时我发现this question所以我从deleteUser函数中删除了void,但没有任何改变。

任何提示我做错了什么?

3 个答案:

答案 0 :(得分:5)

你必须调用delete方法,这样它才会返回承诺,你可以使用你必须这样做的deleteUser(user: User) { return this.http.delete(url+id,...).toPromise(); }

<div id="AftermarketTreeView"></div>
$("#AftermarketTreeView").kendoTreeView({
     dataTextField: ["text"],
     select: onSelectAftermarketTreeNodes,
     loadOnDemand: false
});

答案 1 :(得分:5)

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

,则可以使用subscribe

使用

服务方法

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

组件

this.auditService.getAudits().then(audits => {
  this.audits = audits;
  this.updateChart(true);
});

使用subscribe

服务方法

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

组件

this.auditService.getAudits().subscribe(audits => {
  this.audits = audits;
  this.updateChart(true);
});

答案 2 :(得分:2)

您服务中的deleteUser方法不会返回Promise,因此您无法在其上调用.then(res => ...),例如错误状态。

deleteUser(user: User) {
  console.log('Deleting user'); // <-- no return call - defaults to void
}