我有以下TS方法。当我设置两个断点#1和#2时,它首先对我所有的对象命中#1,然后对我的所有问题都命中#2。
我认为应该换个顺序。
public getBuild(val) {
let j_jobs: any;
for (const project of val.projects) {
for (const job of project.jobs) {
this.httpService.get(job.url + 'api/json',
{
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic TOKENREMOVED'
})
})
.subscribe(
data => {
j_jobs = data; //#2
}
);
}
}
console.log(j_jobs); // #1
}```
Can anybody tell me, why angular works like that?
答案 0 :(得分:0)
那是异步编码。
在Javascript中,您只有一个线程。
在使用异步编码(例如Promises,Observables和AJAX)时,您要求应用程序进行操作,然后在等待过程完成时做一些事情,一旦过程完成, 进行了回调。
这使您可以创建非阻塞进程。试想一下,如果您必须等待HTTP调用完成,并且它们每个都花了10秒钟……不是很友好!
在这种情况下,您将使用RxJS中的Observables,并进行HTTP调用。因此,它是异步的!