Опрос API Javascript

#javascript

Вопрос:

У меня есть конечная точка RestAPI, предоставляющая простой ответ с одним флагом «needUpdate» true/false.

Я пытаюсь написать функцию опроса Javascript, которая вызывает эту конечную точку, и в случае, если needUpdate=true, она перезагружает всю веб-страницу.

 var url = "https://www.example.com/api";
var needUpdate;

function poll(){
  setTimeout(function(){ 
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.responseType = 'json';
    xhr.onload = function(e) {
      if (this.status == 200) {
        const myObj = this.response;
        var needUpdate = myObj["needUpdate"];
        console.log('needUpdate', needUpdate); // console
      }
    };
    xhr.send();
    if(needUpdate == true){
      location.reload(); 
    } else {
      poll();
    }
  }, 3000);
}

var json = JSON.stringify(poll()); 

Он вызывает API каждые 3 секунды, как и ожидалось, а также указывает правильное значение needUpdate в консоли. Но перезарядки не происходит.
Похоже, что значение needUpdate на самом деле не определено в том месте, где я пытался установить условие.
Не могли бы вы, пожалуйста, помочь мне?

Комментарии:

1. добавьте условие после этой строки console.log('needUpdate', needUpdate); // console

2. определите переменную needUpdate вне функции setTimeout

Ответ №1:

условие перемещения внутри xhr.onload функции

 var url = "https://www.example.com/api";
var needUpdate;

function poll(){
  setTimeout(function(){ 
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.responseType = 'json';
    xhr.onload = function(e) {
      if (this.status == 200) {
        const myObj = this.response;
        var needUpdate = myObj["needUpdate"];
        console.log('needUpdate', needUpdate); // console
        if(needUpdate == true){
          location.reload(); 
        } else {
          poll();
        }
      }
    };
    xhr.send();
    
  }, 3000);
}

var json = JSON.stringify(poll());