我有这样的代码:
get dislpayHello(): boolean {
let result = false;
console.log('start');
let observable = of(true);
observable.subscribe((display) => {
console.log('set value');
result = true;
});
console.log('finish');
return result;
}
我一直认为,无论我们在 subscribe() 中放入什么回调,它都将异步执行,并且由于 JavaScript 是单线程的,因此回调将在当前代码块中剩下的内容之后执行。因此,在这个例子中,我希望
dislpayHello
方法始终返回 false
,并且控制台按顺序登录:“开始”、“完成”、“setValue”。然而,事实并非如此,当我尝试时,订阅块在其余代码之前执行。难道我一直都错了?
我如何知道订阅是立即执行还是推迟?有任何我可以阅读的文档或文章吗?
认为 Observable 始终是异步的,这是一种误解,通常是因为它们经常用于处理 HTTP 请求之类的事情,这些请求是:
Observable 是一种延迟计算的计算,从调用之日起,它可以同步或异步返回零到(可能)无限值。
有些人声称 Observables 是异步的。这不是真的。