angular - 当 ngrx/data 进行远程 api 调用时,如何避免 net::ERR_INSUFFICIENT_RESOURCES?

标签 angular angular-ngrx-data ngrx-data

我正在更新@ngrx/data 下的很多记录,它在后台调用远程API 来同步数据库和本地存储。

  dataList.forEach((entity) => {
    const p = this.entitySvc
      .getEntityCollectionService(storeName)
      .upsert(entity)
      .toPromise();
    promises.push(p);
  });
  return Promise.all(promises);
我遇到的问题是远程 API 调用发生在我的代码之外,而且它发生得如此之快,连接使浏览器不堪重负:
net::ERR_INSUFFICIENT_RESOURCES
限制上面的代码无济于事,因为远程 API 调用发生在我无法控制的范围内。
我有办法限制 ngrx/data 远程 API 调用,还是其他方法来解决这个问题?

最佳答案

我将使用 mergeMap rxjs 运算符来添加服务器请求之间的并发性:

updateEntities(): Observable<any> {
  return from(dataList).pipe(
    mergeMap(entity => this.entitySvc
     .getEntityCollectionService(storeName)
     .upsert(entity), 2)
  );
}
然后在需要时调用该函数:
this.updateEntities().subscribe();
请注意 mergeMap 的并发参数值为 2 ,这意味着只会发送 2 个请求 并行 ,防止同时对服务器进行多次调用。您可以根据需要调整此数字。
PS:请记住,当您在 Observable 上调用 toPromise() 时,它将立即执行。

关于angular - 当 ngrx/data 进行远程 api 调用时,如何避免 net::ERR_INSUFFICIENT_RESOURCES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64794901/

相关文章:

node.js - 在 Electron 中使用 Node.js 模块

css - Accordion 组标题的样式(ngx-bootstrap)?

angular - 如何垂直对齐不在表单组中的 Angular + Material 垫复选框?

angular - 为 ngrx/data 实体创建选择器

angular - 如何使用@ngrx/data 自定义我的 reducer ?

angular - 使用@ngrx/data,得到 "No EntityDefinition for entity type [x]"

angular - 在 Angular2 中使用 SVG 图标

angular-ngrx-data - 获取 ngrx/data 的添加操作的结果或 HTTP 响应

angular - NgRx 数据自定义 URL 生成器