Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
新手Javascript问题-在循环期间获取_Javascript_Loops_Fetch - Fatal编程技术网

新手Javascript问题-在循环期间获取

新手Javascript问题-在循环期间获取,javascript,loops,fetch,Javascript,Loops,Fetch,我的主要程序流程应该是: 读取JSON(获取api) 使用json做一些事情 重复 问题是,由于fetchAPI的异步特性,我无法执行do-while操作 基本上,下面的main()方法应该重复无限 到目前为止,我的代码是: let playbook=[]; 设slideIndex=0; 让重新初始化=true; 函数main(){ loadJSON()。然后(r=>initializeSlideshow()); } 异步函数loadJSON(){ let response=wait fe

我的主要程序流程应该是:

  • 读取JSON(获取api)
  • 使用json做一些事情
  • 重复
问题是,由于fetchAPI的异步特性,我无法执行do-while操作

基本上,下面的main()方法应该重复无限

到目前为止,我的代码是:

let playbook=[];
设slideIndex=0;
让重新初始化=true;
函数main(){
loadJSON()。然后(r=>initializeSlideshow());
}
异步函数loadJSON(){
let response=wait fetch('playbook.json');
如果(response.status==200){
playbook=wait response.json();
}
playbook.sort(函数(x,y){
返回x订单-y订单;
});
}
函数初始值SlideShow(){
playbook.forEach((照片,i)=>{
//控制台日志(照片);
设div=document.createElement(“div”);
div.className=“mySlides fade”;
div.style.display=“无”;
设img=document.createElement(“img”);
img.src=photo.uuid;
img.style=“宽度:100%高度:100%”;
儿童分部(img);
document.querySelector(“.slideshow容器”).appendChild(div);
})
startSlideShow();
}
异步函数startSlideShow(){
让幻灯片=document.getElementsByClassName(“mySlides”);
slideIndex=0
做{
console.log(playbook[slideIndex].已启用)
console.log(playbook[slideIndex].duration)
如果(playbook[slideIndex].enabled==“true”){
幻灯片[slideIndex].style.display=“block”;
//setTimeout(startSlideShow,playbook[slideIndex].duration);//每2秒更改一次图像
等待新的承诺(r=>setTimeout(r,playbook[slideIndex].duration));
幻灯片[slideIndex].style.display=“无”;
}
slideIndex++;
}
while(slideIndex}
异步/Await可用于此类场景。
while(true)
将创建一个无限循环。 您的
main
函数如下所示-

async function main() {
  while(true) {
    await loadJSON();
    await initializeSlideshow();
  }
}

async function initializeSlideshow() {
   // Logic to append images
    await startSlideShow();
}

您能描述一下为什么要循环fetch方法吗?如果您试图使数据保持最新,则可能需要更好的解决方案。playbook.json文件可以在外部更改,并且新内容应在幻灯片放映完成后加载。您也可以
等待初始化lideshow()
,。和
返回startSlideShow()在上述函数中,否则此循环将不断加载JSON。@Keith没错。我们应该
初始化slideshow()
上等待
。更新了答案。