Javascript 在我将新数组传递给同一个函数后,我不知道如何停止对该函数中的数组进行迭代

Javascript 在我将新数组传递给同一个函数后,我不知道如何停止对该函数中的数组进行迭代,javascript,arrays,xmlhttprequest,Javascript,Arrays,Xmlhttprequest,在我的应用程序中,我连接到一个新闻服务并收回一系列文章;我每20分钟做一次 在这20分钟内,我循环浏览我提取的文章数组,每15秒从数组中取出一篇新文章 我的问题是,20分钟后,我从新闻服务获得一个新的数组,并开始在该数组中循环。显然,我在做一个双循环,原始数组加上新数组 然后,又过了20分钟,我又在浏览另一系列的新闻文章。。。现在一共三个 这种情况持续了一整天,直到它变成了一个丑陋的烂摊子 我正试图找出在获得新阵列后如何停止原始循环: clearInterval(articleInterval

在我的应用程序中,我连接到一个新闻服务并收回一系列文章;我每20分钟做一次

在这20分钟内,我循环浏览我提取的文章数组,每15秒从数组中取出一篇新文章

我的问题是,20分钟后,我从新闻服务获得一个新的数组,并开始在该数组中循环。显然,我在做一个双循环,原始数组加上新数组

然后,又过了20分钟,我又在浏览另一系列的新闻文章。。。现在一共三个

这种情况持续了一整天,直到它变成了一个丑陋的烂摊子

我正试图找出在获得新阵列后如何停止原始循环:

  • clearInterval(articleIntervalVar)
  • newsArticlesArray=null
但是我试过的东西都不管用,我想不出来

newsFunction();
newsIntervalVar = setInterval(newsFunction, 1200000);

function newsFunction() {
    xmlHttpNewsObject = GetXmlHttpObject();

    if (xmlHttpNewsObject === null){
        alert ("Browser does not support HTTP Request");
        return;
    }

    var url = "";
    xmlHttpNewsObject.open("GET", url, true);
    xmlHttpNewsObject.onreadystatechange = getTheNews;
    xmlHttpNewsObject.send(null);
}

function getTheNews(){
    if (xmlHttpNewsObject.readyState == 4 && xmlHttpNewsObject.status == 200){
        var newsArticlesArray = JSON.parse(xmlHttpNewsObject.responseText).articles
        drawTheNews(newsArticlesArray);
        return;
    }
}

function drawTheNews(newsArticlesArray) {
    var news = document.getElementById('news');
    var numberOfArticles = newsArticlesArray.length;
    var i = 0;
    news.innerHTML = newsArticlesArray[i].title);
    var articleIntervalVar = setInterval(function () {
        i++;
        if (i === numberOfArticles) i = 0;
        news.innerHTML = newsArticlesArray[i].title);
    }, 15000);
}

我会使用一种稍微不同的逻辑,每当您获得要显示的文章列表时设置间隔,并在这之前清除任何现有间隔

此外,我还清理了所有20世纪的
xmlHttp
文献,并用
fetch
:)取代了所有这些文献

const url=“…”;
const newsElem=document.getElementById('news');//缓存元素,而不是每次都访问它
让文章=[];
让articleInterval=null;
const newsFunction=async()=>{
试一试{
const response=等待获取(url)
articles=wait response.json();
clearInterval(articleInterval);//在此处清除现有的间隔
articleInterval=setInterval(drawTheNews,15000);//设置新的间隔
}捕捉(错误){
log(“获取新闻时出错:”,err)
}
}
const drawTheNews=()=>{
const article=articles.pop();
如果(!文章){
log(“耗尽所有新闻!”)
clearInterval(articleInterval)
返回;
}
newsElem.innerHTML=article.title
}
newsFunction();

设置间隔(新闻功能,1200000)您只需清除超时,将ref移动到全局作用域,并每次清除它即可删除旧作用域

var articleIntervalVar;
newsFunction();
newsIntervalVar = setInterval(newsFunction, 1200000);

function newsFunction() {
    xmlHttpNewsObject = GetXmlHttpObject();

    if (xmlHttpNewsObject === null){
        alert ("Browser does not support HTTP Request");
        return;
    }

    var url = "";
    xmlHttpNewsObject.open("GET", url, true);
    xmlHttpNewsObject.onreadystatechange = getTheNews;
    xmlHttpNewsObject.send(null);
}

function getTheNews(){
    if (xmlHttpNewsObject.readyState == 4 && xmlHttpNewsObject.status == 200){
        var newsArticlesArray = JSON.parse(xmlHttpNewsObject.responseText).articles
        drawTheNews(newsArticlesArray);
        return;
    }
}

function drawTheNews(newsArticlesArray) {
    var news = document.getElementById('news');
    var numberOfArticles = newsArticlesArray.length;
    var i = 0;
    news.innerHTML = newsArticlesArray[i].title);
    clearInterval(articleIntervalVar);
    articleIntervalVar = setInterval(function () {
        i++;
        if (i === numberOfArticles) i = 0;
        news.innerHTML = newsArticlesArray[i].title);
    }, 15000);
}

我试过这样做,但是当需要写入其
innerHTML
时,
newsElem
似乎是
null
,这是一个完全不同的问题。这意味着您的JS在加载HTML之前运行。谢谢,但是在检索新的新闻数组时,数组仍然重叠。