gpt4 book ai didi

angular - 如何使用rxjs运算符多次获取最新值

转载 作者:行者123 更新时间:2023-12-03 07:44:10 25 4
gpt4 key购买 nike

我想将错误记录到APP中的服务器上,但是如果前几次(例如一分钟)记录了相同的错误,则需要忽略记录器。
Here is a demo。现在,我使用Map()保存我发送的错误,并使用filter调整为记录器。有没有更好的方法可以使用rxjs运算符执行相同的操作。

最佳答案

这里的主要问题是,在RxJS中,很难处理随时间累积的数据。
解决此问题的一种方法是将RxJS留在该特定点,然后再返回。

sourceString = "Hello, It's me. I was wondering if after all these years you'd like to meet";
errorCache = new Map();
errorLogger$$= new Subject<string>();

interval(1000).pipe(
map(v =>this.sourceString.slice(v % this.sourceString.length,(v % this.sourceString.length) + 1))
).subscribe(v => tryToErrorLog(v))

function tryToErrorLog(msg: string): {
const alreadyHaveErrorLog = this.errorCache.get(msg);

if (!alreadyHaveErrorLog) {
return;
}

this.addError(msg);
}

function addError(msg: string): {
this.errorCache.set(msg);
this.errorLogger$$.next(msg);
}


说明:
然后,您可以使用errorLogger $$处理一段时间内的错误。或者,您可以使用扫描运算符,但最后始终是相同的:您需要一个存储和比较数据的地方(例如:tryToErrorLog和errorCache)。在扫描中,它将是累加值而不是局部变量。

类似问题:
如果必须添加,请随着时间的推移从数组/映射中删除值。

可能的解决方案:
  • scan + filter
  • side-effects(就像您对 map /localvariable/tap所做的一样)
  • custom-operator(内部通过scanside-effects处理特定问题,但包装在custom-operator中。
  • leave rxjs for the time of state(如上述)。

  • TLTR:如果需要随着时间的推移处理状态,我认为在需要的地方逃避rxjs,并在完成处理后返回到状态。

    关于angular - 如何使用rxjs运算符多次获取最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58947016/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com