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 或从渲染中删除组件的东西)太早了。
使用提供的代码不可能给你更好的建议。
在我的 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 或从渲染中删除组件的东西)太早了。
使用提供的代码不可能给你更好的建议。