- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一项服务用于读取初始持久值 - “settings”,并通过可观察的“settings$”将它们提供给订阅者 - 组件。多个组件使用“settings$”可观察值来检索初始持久值并进一步在它们之间交换更新的值。为此,BehaviorSubject 在服务中实现。一切在这里都运行良好。
@Injectable()
export class SettingsService implements OnInit {
settingsBS;
settings$: Observable<SettingsI>;
init() {
this.settingsBS = new BehaviorSubject<SettingsI>(defaultSettings);
this.settings$ = this.settingsBS.asObservable();
...
let s: SettingsI;
this.loadPersistedSettings(s);
// notify subscribers about the
// loaded persisted settings
// and pass these settings to them
this.notifySubscribers(s);
...
}
// this function is also used by components
// to pass new/updated settings to subscribers
public notifySubscribers(s: SettingsI) {
this.settingsBS.next(s);
}
...
}
一个组件还需要初始持久数据,但不需要有关“设置”中进一步更新的进一步通知。因此,它最初订阅是为了获取初始持久数据,然后取消订阅以避免获取任何进一步的更新 - 就像这样。
constructor(private settingsService: SettingsService, ...) { ... }
ngOnInit() {
const settingsSubscription = this.settingsService.settings$.subscribe(o =>
{
merge(this.persistedSettings, o);
...
});
...
settingsSubscription.unsubscribe;
}
尽管如此,订阅仍然有效:
settingsSubscription.unsubscribe;
订阅内的部分: { 合并(this.persistedSettings,o); ... });
当任何组件使用该服务和功能时总是被触发:
settingsService.notifySubscribers(s)
问题是:
怎么会出现:“settingsSubscription.unsubscribe;”不取消订阅吗?
如何解决这个问题?
最佳答案
unsubscribe
它是一种方法而不是属性,因此您需要使用 ()
,它将变为:
.unsubscribe();
如果目标是订阅并仅获取初始持久数据,可以使用:take(1)
this.settingsService.settings$.pipe(take(1)).subscribe(...)
获取第一条数据后会自动取消订阅。
关于angular - BehaviourSubject 的 Observable 不断通知取消订阅的 Subscription,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745108/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!