新手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做一些事情
- 重复
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()
上等待。更新了答案。