JavaScript:如何异步自动递增计数器

JavaScript:如何异步自动递增计数器,javascript,Javascript,我想在单击后自动增加计数器,而不阻止与浏览器的交互。我知道我需要setTimeout或setInterval,但不知道如何实现。任何帮助都将不胜感激。 这是密码 HTML JavaScript 常量输出=document.getElementByIdoutput; 功能启动{ 设计数器=0; setInterval=>{ output.innerHTML=++计数器; }, 1000; } 0 开始 常量输出=document.getElementByIdoutput; 功能启动{ 设计数器=

我想在单击后自动增加计数器,而不阻止与浏览器的交互。我知道我需要setTimeout或setInterval,但不知道如何实现。任何帮助都将不胜感激。 这是密码

HTML

JavaScript

常量输出=document.getElementByIdoutput; 功能启动{ 设计数器=0; setInterval=>{ output.innerHTML=++计数器; }, 1000; } 0 开始 常量输出=document.getElementByIdoutput; 功能启动{ 设计数器=0; setInterval=>{ output.innerHTML=++计数器; }, 1000; } 0
开始设定承诺并等待运行时

const start=document.getElementByIdstart; const bar=document.getElementByIdbar; 常量百分比=document.getElementByIdpercent; const results=document.getElementByIdresults; 让promisseId=0; 常数计数器=n=100=>{ 如果n>100{ n=100; } 约定++; 返回新PromiseSolve=>{ //在这里,您可以设置拒绝、解析、拒绝。如果计数器抛出错误,则必须运行拒绝。。。 const id=约定; 设i=1;//i设置在外部。 const interval=setIntervalfunction{ 如果i==n{ 清晰间隔; 决心{ 我 身份证件 }; } bar.value=i++; }, 100; }; }; start.addEventListener 点击 => counterparseIntthis.percent.value.thenres=>{ const p=document.createElementp; p、 innerText=`Promise${res.id}已解析!它转到${res.i}%`; 结果:p; } ; // console.log解析后的res!您可以在计数器100处使用另一个值而不是100。 转到%| 开始 运行多次,同时使用不同的值,以查看魔术


设定承诺并等待运行时间

const start=document.getElementByIdstart; const bar=document.getElementByIdbar; 常量百分比=document.getElementByIdpercent; const results=document.getElementByIdresults; 让promisseId=0; 常数计数器=n=100=>{ 如果n>100{ n=100; } 约定++; 返回新PromiseSolve=>{ //在这里,您可以设置拒绝、解析、拒绝。如果计数器抛出错误,则必须运行拒绝。。。 const id=约定; 设i=1;//i设置在外部。 const interval=setIntervalfunction{ 如果i==n{ 清晰间隔; 决心{ 我 身份证件 }; } bar.value=i++; }, 100; }; }; start.addEventListener 点击 => counterparseIntthis.percent.value.thenres=>{ const p=document.createElementp; p、 innerText=`Promise${res.id}已解析!它转到${res.i}%`; 结果:p; } ; // console.log解析后的res!您可以在计数器100处使用另一个值而不是100。 转到%| 开始 运行多次,同时使用不同的值,以查看魔术



大多数javascript都是阻塞的-虽然它在谈论promises@evolutionxbox不,不是,请看网络工作者。但不知道如何实现阅读可能是一个好的开始…@JuanMendes我知道网络工作者,但这不是语言功能。这是一个web api。即使在web worker内部,JS仍然是单线程的。ECMAScript没有说明它是阻塞的还是单线程的,或者其他的。在某种程度上,大多数实现都是单线程的。无论如何,这里很难讨论这个问题,@JuanMendes,evolutionxbox…大多数javascript都是阻塞的-虽然它在谈论promises@evolutionxbox不,不是,请看网络工作者。但不知道如何实现阅读可能是一个好的开始…@JuanMendes我知道网络工作者,但这不是语言功能。这是一个web api。即使在web worker内部,JS仍然是单线程的。ECMAScript没有说明它是阻塞的还是单线程的,或者其他的。在某种程度上,大多数实现都是单线程的。无论如何,这里很难讨论这个问题,@JuanMendes,evolutionxbox…@Iago Calazans非常感谢您的回答。你的答案正是我想要的,而且非常聪明。但我不能运行它。给出未捕获的语法错误:意外标记'{请看一看好吗?嘿@Greg,我犯了!为这个小错误感到抱歉!嘿@Iago Calazans,谢谢您的快速响应。我做到了,现在它没有抛出任何错误,但控制台中没有输出。现在代码运行,但最后在promise ReferenceError中未捕获地抛出此错误错误错误:我没有定义嘿@Iago Calazans不幸的是没有。它不是异步的,在单击按钮时不起作用,请检查这里@Iago Calazans非常感谢您的回答。您的回答是我想要的,非常聪明。但我无法运行它。提供未捕获的语法错误:意外令牌'{。你能看一下吗?嘿@Greg,我成功了!为这个小错误感到抱歉!嘿@Iago Calazans,谢谢你的快速反应。我成功了,现在成功了
没有抛出任何错误,但控制台中没有输出。现在代码运行,但最终在promise ReferenceError中未捕获地抛出此错误:我没有定义Hey@Iago Calazans不幸没有。它不是异步的,在单击按钮时不起作用,请检查此处
<button id="start">start</button>
let start= document.querySelector('#start'); 

const counter = () => {
  for(let i = 0; i<1000; i++){
  console.log(i)
 }
}

start.addEventListener("click", counter);