Javascript rxjs每N次处理一次错误

Javascript rxjs每N次处理一次错误,javascript,rxjs,Javascript,Rxjs,在我下面的代码中,我每秒都会从摄像机中得到一张脸。如果我认出了用户,我就会得到一个令牌。如果我不能识别用户,我会打印一个错误 问题是,我不想每隔一秒钟就向用户发送带有错误的垃圾邮件。如何在第n次连续故障时打印错误 subscription = getFaces() .throttleTime(1000) .switchMap(face => { return Observable.fromPromise(authenticateUserFace(face)) .catch(er

在我下面的代码中,我每秒都会从摄像机中得到一张脸。如果我认出了用户,我就会得到一个令牌。如果我不能识别用户,我会打印一个错误

问题是,我不想每隔一秒钟就向用户发送带有错误的垃圾邮件。如何在第n次连续故障时打印错误

subscription = getFaces()
.throttleTime(1000)
.switchMap(face => {
  return Observable.fromPromise(authenticateUserFace(face))
    .catch(err => {
      console.log('Not found')  // I want this to happen after 3 consecutive attempts
                                // But I don't want to retry
                                // I want a new value from the outer observable
      return Observable.empty()
    })
})
.subscribe((token) => {
  console.log('Found')
  console.log(token)
})

只需使用一个计数器变量,并且仅当它是三的倍数时才记录到控制台:

const k = 3; // change this according to your needs
var counter = 0;

subscription = getFaces()
    .throttleTime(1000)
    .switchMap(face => {
        return Observable.fromPromise(authenticateUserFace(face))
            .catch(err => {
                counter++; // increment counter
                if (counter % k == 0) // this is true once every k times
                    console.log('Not found');

                return Observable.empty();
            })
    })
    .subscribe((token) => {
        console.log('Found');
        console.log(token);
    })