angular – 订阅限制结果
我是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).它会产生任何副作用吗?,因为重复初始化相同的订阅.任何指导表示赞赏. 编辑: 解决方法
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(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |