首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Angular 5中使用rxJS存储API中的可观测数据?

如何在Angular 5中使用rxJS存储API中的可观测数据?
EN

Stack Overflow用户
提问于 2018-06-10 05:06:33
回答 1查看 1.9K关注 0票数 0

我在angular中有一个从API获取数据的服务,这些数据在许多组件中使用,所以每次调用API来获取相同的数据是一种浪费。

所以我继续尝试使用BehaviorSubjects来存储数据。我在一定程度上很好地使用了它,如下所示:

服务

books = new BehaviorSubject<Book[]>(null);
setBooks(book: Book[]) {
    this.books.next(book);
}
getBooks() {
    this.http.get(...).do(
        (res) => {
            this.setBooks(res.books);
        }
    );
}

组件:

ngOnInit() {
    this.booksService.books.subscribe(
        (books) => {
            // in case the api was never called
            if (books == null) {
                return this.booksService.getBooks().subscribe();
            }
            console.log(books);
            // ...
        }
    );
}

当有书时,它工作得很好,但如果书是一个空数组(这是预期的行为之一),程序就会陷入循环,永远调用api。测试它时,我发现它在服务调用中的.do()部分卡住了,但我不知道原因。

我读到here BehaviorSubject不是用来处理null初始值的,但就像@estus建议的那样,使用ReplaySubject(1)也会发生同样的事情。

我想知道是否有像这样存储数据的“正确”方法。我也不认为使用本地存储是最好的解决方案,因为它可能是大量的数据,并且在应用程序的使用过程中会发生很大的变化。

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

https://stackoverflow.com/questions/50778540

复制
相关文章

相似问题

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