我不确切知道Angular或Typescript是如何工作的,我认为在这段代码中,它应该是3 1 2.但它是1 2 3.请帮帮我。
confirmDelete(id: number) {
this.commentService.queryByStoryId(id).subscribe(
(res: ResponseWrapper) => {
this.comments = res.json;
console.log(3);
},
(res: ResponseWrapper) => this.onError(res.json)
);
console.log(1);
console.log(2);
// for (let i = 0; i < this.comments.length; i++) {
// this.commentService.delete(this.comments[i].id);
// }
this.postService.delete(id).subscribe((response) => {
this.eventManager.broadcast({
name: 'postListModification',
content: 'Deleted an post'
});
this.activeModal.dismiss(true);
});
}
答案 0 :(得分:0)
这是因为在JavaScript(和TypeScript)中,代码分为两类:
同步代码:
代码同步执行,因为没有什么可以等待的,你告诉他做点什么就行了。
这部分代码就是这种情况,只要您输入T`1
方法就会执行:
代码部分:
T
异步代码:
有一些代码执行被延迟,因为你需要在执行自己的代码之前等待一些事情。
这是代码的这一部分:
代码部分:
confirmDelete()
您可以访问服务类 console.log(1);
console.log(2);
,并且需要同步执行方法this.commentService.queryByStoryId(id).subscribe(
...
);
。问题是,因为这个方法可能(从它的外观)执行对后端服务的HTTP调用,你想要的是在收到响应后执行一些代码。
您看到的是来自库CommentService
的{{1}}方法,它允许您在后端工作完成后从HTTP调用中捕获响应。
这意味着queryByStory()
方法中的所有内容都是异步执行的新函数 - 当响应准备就绪时。
所以这段代码是异步的,会在延迟后执行:
subscribe()
这就是您见证RxJS
而非subscribe()
的原因。
但是你又一点一点地学习,所以在尝试编写任何代码之前,先了解一下JavaScript是什么,然后你就会学到你缺乏的基础知识。在尝试使用其他库(如 this.eventManager.broadcast({
name: 'postListModification',
content: 'Deleted an post'
});
this.activeModal.dismiss(true);
和observables)之前,您将了解哪些1 2 3
是有关异步代码的基础知识。
我的意思是我们不能在这教你这个,所以这取决于你。互联网上已有很多关于该主题的内容。