在Angular中,订阅的值始终是给定的值-1,即真实值之前的值。这是因为在订阅期间,值是异步更新的,订阅者可能会在值更新之前订阅到上一个值。
下面是一个使用RxJS的示例代码来解决这个问题:
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { startWith } from 'rxjs/operators';
@Component({
selector: 'app-my-component',
template: `
{{ value$ | async }}
`,
})
export class MyComponent implements OnInit {
value$: Observable;
ngOnInit() {
this.value$ = this.getValue().pipe(startWith(-1));
}
getValue(): Observable {
// 模拟异步获取值
return new Observable(observer => {
setTimeout(() => {
observer.next(42);
observer.complete();
}, 1000);
});
}
}
在这个示例代码中,我们使用getValue
方法模拟异步获取值的过程,并将其封装为一个Observable对象。然后,我们使用startWith
操作符在订阅之前将初始值设置为-1。这样,订阅者就会首先接收到-1,然后再接收到真实的值。
在模板中,我们使用async
管道来订阅value$
流并显示其值。
通过这种方式,我们可以确保订阅者始终接收到真实值之前的值。