我做错了什么?Javascript在一段时间内运行异常(setInterval())

我做错了什么?Javascript在一段时间内运行异常(setInterval()),javascript,handlebars.js,Javascript,Handlebars.js,我试图使用fetch()函数循环一个json数组,一次显示8个项目,持续8秒,并重复自己的操作,但是javascript变得疯狂,过了一段时间就在数组中运行 第一次迭代很好 非常感谢您的帮助 不知道出了什么问题 $(document).ready(function () { console.log('working...'); FetchData(); }); function FetchData() { fetch(dataPath) .then(functi

我试图使用
fetch()
函数循环一个json数组,一次显示8个项目,持续8秒,并重复自己的操作,但是javascript变得疯狂,过了一段时间就在数组中运行

第一次迭代很好

非常感谢您的帮助

不知道出了什么问题

$(document).ready(function () {
   console.log('working...');
   FetchData();
   });

 function FetchData() {
  fetch(dataPath)
    .then(function (response) {
      return response.json();
    })
    .then(function (json) {
      data = json;
      clearInterval();
      DisplayData(data);
    })
    .catch(function (error) {
      console.log(error);
      setInterval(FetchData, 5000);
    })
}

function DisplayData(data) {
    let golferDisplayData = data.Golfers;
  var indexOffset = 0;
  $containerContentSection.html(templateMainContent(golferDisplayData.slice(indexOffset, indexOffset + 8)));
  indexOffset += 7;

  setInterval(() => {

    console.log(indexOffset);
    // console.log(indexOffset, golferDisplayData.length);
    // console.log(golferDisplayData.slice(indexOffset, indexOffset + 8));
    $containerContentSection.html(templateMainContent(golferDisplayData.slice(indexOffset, indexOffset + 8)));

    indexOffset += 7;

    if(indexOffset >= golferDisplayData.length) {
      indexOffset = 0;
      FetchData();
    }

  }, 8000);
}


我正在尝试使用
fetch()
循环一个json数组,每8秒显示8个项目,并重复自己的操作,在完成一次循环后,它应该再次提取json文件。

间隔未被清除

间隔需要分配给如下变量:
let myInterval=setInterval()

然后您可以像这样清除间隔:
clearInterval(myInterval)


或者,由于您只在1次迭代中使用间隔并在迭代后立即清除它,因此您可以使用调用
setInterval
setTimeout()

而不是
setTimeout
,创建对
FetchData()
的无限调用。阅读进一步解释您需要保存
intervalId
并像
clearIntervalid(intervalId)
clearInterval()一样清除它阅读@ritaj-bad建议,看看它是如何工作的<在这种情况下,code>setInterval
是错误的,特别是如果每次执行时都要清除它。这正是
setTimeout
的目的。关于
setTimeout
的评论是正确的。但是,如果仍然要使用
setInterval
,则必须将其存储在变量中,然后将其作为参数传递给
clearInterval
。类似于:
letintervalid=setInterval(…)
then
clearInterval(intervalID)