Angular 在承诺中发出无效

Angular emit inside a promise not working

在我的 Angular 项目中,我想在 .then 和 .catch 中发出,但它们确实被调用了。 .then 和 .catch 中的所有其他内容都会被调用。

当我在 promise 之外发出时它确实有效。

这是我的代码

updateAssignee(newAssignee: string) {
    this.storyService.updateAssignee(this.story, newAssignee).then(res =>{
      console.log('test')     //This one gets called
      this.onError.emit({     //This one does not get called
        error: false,
        errorText: ''
      });
    }).catch((error) => {
      console.log('test')     //This one gets called
      this.onError.emit({     //This one does not get called
        error: true,
        errorText: '• ' + error.message
      });
    });

    this.onError.emit({     //This one gets called
      error: false,
      errorText: '• Missing permissions'
    });
  }

难道不能在.then 和.catch 里面发射吗?还是我遗漏了什么?

这些组件的加载方式是通过 ngFor 循环。也许这会导致一些问题?

<span *ngFor="let story of done">
    <app-storyboard-story (onError)="throwError($event)" [story]="story" [project]="project" cdkDrag></app-storyboard-story>
</span>

已更新

根据代码示例,ngFor 检测到更改并取消订阅子组件。

解决方案是实施 trackBy https://angular.io/api/common/NgForOf,这应该有助于在 done 更改后保留子组件的实例。

原版

以上没有任何问题。您可以通过添加

来验证它是否有效
this.onError.subscribe(console.log);

this.storyService 调用之前。

我建议您调查侦听器如何订阅和取消订阅并更改其流程,因为看起来它取消订阅(调用 ngIf 或从渲染中删除组件的东西)太早了。

使用提供的代码不可能给你更好的建议。