Как избежать "InternalError: слишком много рекурсии" в наблюдаемой Angular? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть простая угловая наблюдаемая, которая должна работать непрерывно, проверяя разницу во времени в каждом цикле и повторяя цикл один раз в секунду.Я получаю «InternalError: слишком много рекурсии» при запуске.Согласно этому: http://bonsaiden.github.io/JavaScript-Garden/#dealing-with-possible-blocking-code Я использую правильный метод.Как исправить?

Наблюдаемая угловая:

export class MyService {
  private lastHeartBeatTime = null; // Time of the last heartbeat
  private heartBeatTimeoutId = null;

  private secondsToHeartbeatAlert = 5; // Number of seconds of no heartbeat 

  constructor() {
    this.lastHeartBeatTime = performance.now(); // Initialise local heartbeat variable with current time
  }

  subscribeToHeartbeat(callbackfn): any {
    // Post a value via the observable to cause an alert to be raised:
    if((performance.now() - this.lastHeartBeatTime) / 1000 >= this.secondsToHeartbeatAlert) return(true);
    // Create a new timeout to call this function again after the specified num of milliseconds (e.g. after 1 second):

    // **** PROBLEM HERE: ***
    else this.heartBeatTimeoutId = setTimeout(this.subscribeToHeartbeat(callbackfn), 1000);
  }
}

Подписка внутри другого компонента:

// Subscribe to heartbeat over websockets:
MyService.subscribeToHeartbeat(this.handleHeartbeatFailure);

// Handler:
  handleHeartbeatFailure:any = (message) => {
   alert('Websocket is down!")
  }

1 Ответ

2 голосов
/ 31 мая 2019

Вы вызываете функцию и не назначаете ее в течение времени ожидания

setTimeout(this.subscribeToHeartbeat(callbackfn), 1000);

должно быть

setTimeout(() => this.subscribeToHeartbeat(callbackfn), 1000);

или вы можете использовать bind

setTimeout(this.subscribeToHeartbeat.bind(this, callbackfn), 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...