Apollo+Angular:如何阻止服务器重复返回数据
解决Apollo Mutate回调重复执行的问题
你可以借助RxJS的take(1)操作符来限制next回调只执行一次,这个操作符会在Observable发出第一个值后立即完成订阅,自动切断和服务器的连接,后续的返回数据就不会触发回调了。
修改后的代码示例
// 记得先导入take操作符 import { take } from 'rxjs/operators'; this.apollo.mutate({ mutation: XXXXXXXX, variables: { instance_string: X, accesstoken: X } }) .pipe(take(1)) // 核心:添加这一行,只取第一个返回值 .subscribe({ next: (data: any ) => { console.log("data returned from Server", data); this.SaveData(data); }, error: (err) => { this.presentToastFail(err); } });
补充说明
take(1)会保证只处理服务器返回的第一个数据,之后自动取消订阅,彻底忽略后续的循环返回。- 如果你希望必须获取到一个值(否则抛出错误),可以换成
first()操作符,用法和take(1)一致,但如果服务器没有返回任何数据,会触发error回调。
内容的提问来源于stack exchange,提问作者Thomas Degroot
相关产品推荐
相关产品推荐

