加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 订阅限制结果

发布时间:2020-12-17 17:12:12 所属栏目:安全 来源:网络整理
导读:我是RxJS的新手.我在我的一个Angular应用程序中使用它.我想实现以下目标.对于给定的user_ids集合:ex [1,2,3],(i)从数据库中提取用户详细信息,一旦我获得用户详细信息,然后我想从其他数据库表中提取user_reservation详细信息(ii)订阅并在ngOnDestroy()方法中
我是RxJS的新手.我在我的一个Angular应用程序中使用它.我想实现以下目标.对于给定的user_ids集合:ex [1,2,3],(i)从数据库中提取用户详细信息,一旦我获得用户详细信息,然后我想从其他数据库表中提取user_reservation详细信息(ii)订阅并在ngOnDestroy()方法中释放订阅.

这是我试过的……

let user_ids= [1,3];

user_ids.forEach
((id) =>
{
    this.subscription = this.http.get(`https://someUrl/api/userdetails/${id}`)
        .pipe(
            map((x:any) => x.id),concatMap(userid => 
                this.http.get(`https://someUrl/api/reservationDetails? 
                         userId=${userid}`)),take(2)
         ).subscribe();
})


    ngOnDestroy(): void {
          if(this.subscription) { 
              this.subscription.unsubscribe();
              this.subscription = null;
          }
    }

它给了我结果,但是当我想限制预订细节时(我只想采取前两个预订细节),(i)它没有工作,而是返回给定用户ID的所有预订细节. (ii)我在forEach()循环中声明订阅(this.subscription).它会产生任何副作用吗?,因为重复初始化相同的订阅.任何指导表示赞赏.

编辑:
作为JGFMK,请我提供有关数据库操作的更多信息.我正在更新我的帖子.我使用SQL Server作为后端.但我不限制服务器端查询的行.我只想获取两个随机(行)结果,我认为RxJS take(2)将仅通过两行来限制结果. (如果我错了,请求你纠正我).

解决方法

take(2)不按你想要的方式工作.如果您的observable发出值的流,它将只需要前2个值并取消订阅流.

要获得前2行用户详细信息,您必须在API中实现它以限制结果并将其传递给url查询,例如https:// someUrl / api / reservationDetails?userId = ${userid}& limit = 2然后您的API将使用LIMIT再次从数据库进行查询.

更新:对于您的订阅,您实际上只取消订阅上次订阅,并且您在此处有内存泄漏.处理它的更好方法是:

let user_ids= [1,3];
this.subscriptions = new Subscription();

user_ids.forEach
((id) =>
{
    this.subscriptions.add(this.http.get(`https://someUrl/api/userdetails/${id}`)
        .pipe(
            map((x:any) => x.id),take(2)
         ).subscribe());
})


    ngOnDestroy(): void {
          this.subscriptions.unsubscribe();
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读