API中的变量更改时如何调用函数

时间:2019-06-04 02:24:16

标签: javascript

我正在调用API并定期更新对象变量。 在updateAPI函数中,我要检查变量是否增加以及是否要调用函数。

我尝试了setter和getter,存储和其他方法。在当前代码的不同变体中也玩了很多,但我无法理解其他解决方案。

function updateAPI() {
  var getJSON = function(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'json';
    xhr.onload = function() {
      var status = xhr.status;
      if (status == 200) {
          callback(null, xhr.response);
      } else {
          callback(status);
      }
    };
    xhr.send();
  };
  getJSON('api.example.com',  function(err, response) {
    if (err != null) {
      console.error(err);
    } else {
      let data = response.data
      var followers = data.followers_count
      var old = followers;

      function check() {
        if (old > followers) {
          console.log('changed');
          var old = followers;
        }
        if (old < followers) { 
          console.log('not changed'); 
          var old = followers; 
        }
      }
      setInterval(check, 5000);

    }
  });
}
updateAPI();
setInterval(() => { updateAPI() }, 10000);

当前代码不会记录API发生的任何更改。但是我可以使用console.log('followers')来查看值的变化。

1 个答案:

答案 0 :(得分:0)

一些小事情要开始:

getJSON移到updateAPI的上方和上方。现在,每次调用它时,它都会创建一个不需要的新函数。同样,您也可以将其替换为fetch api。您还可以抽象check函数,并使其接受一个(或两个)参数,并告诉您是否应更新。

第二次尝试调试该怎么做?使用console.log语句还是Chrome调试器?问题出在以下代码中:

var followers = data.followers_count
var old = followers;

followersold 总是相等。每次调用函数时都要重新分配它们。这就是为什么您看到它发生了变化,却从未看到它记录任何东西的原因。