Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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

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_Async Await_Onclick_Cancellation - Fatal编程技术网

Javascript 当再次单击按钮时,有没有办法停止上一个异步循环?

Javascript 当再次单击按钮时,有没有办法停止上一个异步循环?,javascript,loops,async-await,onclick,cancellation,Javascript,Loops,Async Await,Onclick,Cancellation,如果我通过单击带有IOk的按钮,在浏览器DOM的标记内添加for loop的代码,我现在回到PC 下面是一个简单的工作代码段,我基本上存储了一个cancel函数,您可以检查它是否被设置在绿色按钮上,单击,如果是调用它。这个cancel函数所做的就是将本地cancelMe标志设置为true,然后您可以在for循环中使用它来中止 另外,greet变量只是为了显示它是一个新的for循环,因为我还将其重置为1,以便计数再次从1开始 const delay=ms=> 新承诺(resolve=>setTi

如果我通过单击带有
IOk的按钮,在浏览器DOM的
标记内添加
for loop
的代码,我现在回到PC

下面是一个简单的工作代码段,我基本上存储了一个cancel函数,您可以检查它是否被设置在绿色按钮上,单击,如果是调用它。这个cancel函数所做的就是将本地cancelMe标志设置为true,然后您可以在for循环中使用它来中止

另外,greet变量只是为了显示它是一个新的for循环,因为我还将其重置为1,以便计数再次从1开始

const delay=ms=>
新承诺(resolve=>setTimeout(resolve,ms));
让greet=1//只是为了调试。
让我们取消;
异步函数onGreenPlayButtonClicked(){
如果(取消)取消();
让我=假;
取消=()=>{
取消我=真;
问候=1;
}
对于(var count=0;count<50&&!cancelMe;count++){
等待延迟(1000);
如果(取消我)中断;
log('greeting:'+greeting++);
}
};
document.querySelector('.green')。
addEventListener(“单击”,单击“重新播放”按钮)

绿色按钮
好的,我现在回到电脑旁

下面是一个简单的工作代码段,我基本上存储了一个cancel函数,您可以检查它是否被设置在绿色按钮上,单击,如果是调用它。这个cancel函数所做的就是将本地cancelMe标志设置为true,然后您可以在for循环中使用它来中止

另外,greet变量只是为了显示它是一个新的for循环,因为我还将其重置为1,以便计数再次从1开始

const delay=ms=>
新承诺(resolve=>setTimeout(resolve,ms));
让greet=1//只是为了调试。
让我们取消;
异步函数onGreenPlayButtonClicked(){
如果(取消)取消();
让我=假;
取消=()=>{
取消我=真;
问候=1;
}
对于(var count=0;count<50&&!cancelMe;count++){
等待延迟(1000);
如果(取消我)中断;
log('greeting:'+greeting++);
}
};
document.querySelector('.green')。
addEventListener(“单击”,单击“重新播放”按钮)

绿色按钮
请通过添加实际代码创建一个。您是否在动态添加
script
标记?是的,但只有在for循环是异步的情况下,否则在上一个for循环完成之前,按钮单击才会被识别。@Keith您会怎么做?当然,您能用您尝试的工作片段更新您的问题吗。这样可以更容易地显示要执行的操作等。很好的一个,我现在正在移动,因此无法创建代码段,但好消息是您已经在执行异步循环,所以您只需要一个标志来停止循环,我要做的是使您的函数返回一个取消函数。请通过添加实际代码来创建一个。您是否在动态添加
script
标记?是的,但只有在for循环是异步的情况下,否则在上一个for循环完成之前,按钮单击才会被识别。@Keith您会怎么做?当然,您能用您尝试的工作片段更新您的问题吗。这样可以更容易地显示要执行的操作等等。很好,我现在正在移动,所以无法创建代码段,但好消息是您已经在执行异步循环,所以您只需要一个标志来停止循环,我要做的是让您的函数返回一个取消函数。这很好,我现在在外面,我会在以后执行,所以现在我不能给它绿色支票。。谢谢你的支持兄弟。这很好,我现在在外面,我稍后会执行,所以现在我不能给它绿色支票。。谢谢你的支持,兄弟。
async function onGreenPlayButtonClicked() {
    for (var count = 0; count < 50; count++) {
        await new Promise(resolve => setTimeout(resolve, 1000)); // 1 SEC WAIT
        MinecraftAvatar.sayForNSeconds(greeting, 7)
    }
};
async function onGreenPlayButtonClicked() {
    for (var count = 0; count < 2; count++) {
        await new Promise(resolve => setTimeout(resolve, 10)); // 0.01 SEC WAIT
        MinecraftAvatar.sayForNSeconds(greeting, 7)
    }
};