首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用ngrx存储的DataSource加载方法

不使用ngrx存储的DataSource加载方法
EN

Stack Overflow用户
提问于 2019-01-31 10:58:01
回答 1查看 517关注 0票数 2

如何在ngrx存储中使用DataSource加载方法?

我有以下问题: 1.当页面加载时,加载方法被称为2.无限加载3. 2请求被发送到服务器,而不是1。

如果我直接使用这项服务,那就没有问题了。

TypeScript:

代码语言:javascript
复制
this.ds = new CustomStore({
  load: (loadOptions: any) => {
    this.myFacade.loadAllRecords(this.filter, loadOptions);
    return this.myFacade.records$
      .toPromise()
      .then(result => {
        return result;
      });
  }
});

代码语言:javascript
复制
this.ds = new CustomStore({
  load: (loadOptions: any) => {
    this.myFacade.loadAllRecords(this.filter, loadOptions);
    return new Promise(resolve => this.myFacade.records$
      .pipe(takeUntil(this.unsubscribe$)).subscribe(resolve)).then(result => {
        return result;
      });
  }
});

代码语言:javascript
复制
export class MyFacade {
  public records$: Observable<any>;
  constructor(private store: Store<State>) {
    this.records$ =
      this.store.pipe(select(myQuery.getRecords));
  }
  loadAllRecords(model: myModel, loadOptions?: LoadOptions) {
    this.store.dispatch(new LoadRecords(model, loadOptions));
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-08 12:59:46

我认为问题是你可观察到的records$还没有完成。而toPromise()仍在等待可观测结果的解算。

我要做以下几点:

在外观中添加take(1)

代码语言:javascript
复制
this.records$ =
  this.store.pipe(
    select(myQuery.getRecords),
    take(1)
  );

然后更改CustomStore

代码语言:javascript
复制
this.ds = new CustomStore({
  load: (loadOptions: any) => {
    this.myFacade.loadAllRecords(this.filter, loadOptions);
    return this.myFacade.records$
      .pipe(
        takeUntil(this.unsubscribe$)
      ).toPromise();
  }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54459038

复制
相关文章

相似问题

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