首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在subject.asObservable之后有什么陷阱返回subject.next ()吗?

在subject.asObservable之后有什么陷阱返回subject.next ()吗?
EN

Stack Overflow用户
提问于 2019-06-07 16:41:29
回答 2查看 48关注 0票数 1

假设我有以下代码

代码语言:javascript
复制
Injectable()
export class MyStore {
    store = new BehaviorSubject(true);
    updateStore(value) {
        this.store.next(value);
        return this.store.asObservable();
    }

    selectValue() {
        return this.store.asObservable();
    }
}

从updateStore返回的可观察到的值是否可能没有在next()之前更新的值?上面的代码有什么缺陷吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-07 16:48:45

从updateStore返回的可观察到的值是否可能没有在next()之前更新的值?

不,“可观测”总是有next()中传递的值。话虽如此,每当对updateStore()的返回值执行订阅时,订户将接收在next()中传递的值。

上面的代码有什么缺陷吗?

您不必每次做“下一步”时都使用return this.store.asObservable()。用户(即订阅者)只需将MyStore.store订阅为“商店”,这本身就是可以观察到的。

代码语言:javascript
复制
updateStore(value) {
    this.store.next(value);        
}
票数 2
EN

Stack Overflow用户

发布于 2019-06-07 16:46:55

从updateStore返回的可观察到的值是否可能没有在next()之前更新的值?

不可能的。BehaviorSubject是同步的,因此在next()调用返回之前设置该值。

https://github.com/ReactiveX/rxjs/blob/master/src/internal/BehaviorSubject.ts#L42

代码语言:javascript
复制
  next(value: T): void {
    super.next(this._value = value);
  }

上面的代码有什么缺陷吗?

updateStore()返回一个可以观察到的东西是毫无意义的。函数的调用方已经知道存储的值。在设置值方面没有任何延迟,因此调用方不需要等待结果。

其他一切看起来都很好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56498274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档