Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.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_Promise - Fatal编程技术网

Javascript 如何通过外部命令停止异步处理的执行

Javascript 如何通过外部命令停止异步处理的执行,javascript,promise,Javascript,Promise,我希望这段代码能说明问题 第一个按钮启动异步命令(这里是一个setTimeout示例),第二个按钮允许在旅程中停止执行 除了在我的代码中,它并不像我想象的那样,而且我承认,我仍然觉得很难接受这些承诺 目前我不明白为什么设置超时没有效果? 我(仍然)错过了什么 (功能(messageBox) { const texBox=document.getElementById('message-box') ; messageBox.txt=txt=>texBox.textContent=txt mess

我希望这段代码能说明问题
第一个按钮启动异步命令(这里是一个setTimeout示例),第二个按钮允许在旅程中停止执行

除了在我的代码中,它并不像我想象的那样,而且我承认,我仍然觉得很难接受这些承诺

目前我不明白为什么设置超时没有效果?

我(仍然)错过了什么

(功能(messageBox)
{
const texBox=document.getElementById('message-box')
;
messageBox.txt=txt=>texBox.textContent=txt
messageBox.add=txt=>texBox.textContent+='\n'+txt
}
(window.messageBox=window.messageBox | |{});
函数计时器()
{
让状态='none'//使用
,obj=document.createElement('b')
,ref=null
,msTime=0
;
const sleep==>newpromise(res=>ref=setTimeout(res,ms))
,取消=\=>新承诺(res=>{
obj.onclick=\u=>{
如果(状态==='inUse'){
clearTimeout(参考)
res()
} } })
异步函数启动(ms){
如果(状态=='none'){
msTime=ms
状态='inUse'
等待承诺。比赛([睡眠,取消])
状态='无'
}
}        
函数stop(){if(status=='inUse')obj.click()}
返回({start,stop})
}
常量btStart=document.getElementById('bt-start')
,btAbort=document.getElementById('bt-abort')
,OnDelay=timer()
;
btStart.onclick=\=>
{
txt('开始等待5秒…')
OnDelay.start(5000)
添加('下一步要做的事情…')
}
bAbort.onclick=\uClick=>
{
停止
messageBox.add(“…中止!”)
}
#消息框{
边缘:1米;
边框:1px纯色天蓝;
宽度:20em;
高度:10公分;
}
等待5s
中止
消息…
使用异步函数:
(功能(messageBox){
const texBox=document.getElementById('message-box');
messageBox.txt=txt=>texBox.textContent=txt
messageBox.add=txt=>texBox.textContent+='\n'+txt
}
(window.messageBox=window.messageBox | |{});
函数计时器(){
让时光流逝,拒绝承诺;
功能启动(nMS){
返回新承诺((解决、拒绝)=>{
timerID=setTimeout(\ux=>{
timerID=未定义;
解决();
},网络管理系统);
拒绝承诺=拒绝;
});
}
函数停止(){
timerID&&clearTimeout(timerID);
timerID=未定义;
拒绝承诺();
}
返回({
开始
停止
})
}
const btStart=document.getElementById('bt-start'),
btAbort=document.getElementById('bt-abort'),
OnDelay=计时器();
btStart.onclick=async=>{
txt('开始等待5秒…')
试一试{
等待OnDelay启动(5000);
}捕获({}
添加('finishwaiting:)')
}
btAbort.onclick=\u=>{
停止
messageBox.add(“…中止!”)
}
#消息框{
边缘:1米;
边框:1px纯色天蓝;
宽度:20em;
高度:10公分;
}
等待5s
中止
消息…
使用异步函数:
(功能(messageBox){
const texBox=document.getElementById('message-box');
messageBox.txt=txt=>texBox.textContent=txt
messageBox.add=txt=>texBox.textContent+='\n'+txt
}
(window.messageBox=window.messageBox | |{});
函数计时器(){
让时光流逝,拒绝承诺;
功能启动(nMS){
返回新承诺((解决、拒绝)=>{
timerID=setTimeout(\ux=>{
timerID=未定义;
解决();
},网络管理系统);
拒绝承诺=拒绝;
});
}
函数停止(){
timerID&&clearTimeout(timerID);
timerID=未定义;
拒绝承诺();
}
返回({
开始
停止
})
}
const btStart=document.getElementById('bt-start'),
btAbort=document.getElementById('bt-abort'),
OnDelay=计时器();
btStart.onclick=async=>{
txt('开始等待5秒…')
试一试{
等待OnDelay启动(5000);
}捕获({}
添加('finishwaiting:)')
}
btAbort.onclick=\u=>{
停止
messageBox.add(“…中止!”)
}
#消息框{
边缘:1米;
边框:1px纯色天蓝;
宽度:20em;
高度:10公分;
}
等待5s
中止

message…
我在下面添加了一些简单的代码,这些代码可能会模拟您想要的执行,并有助于解决您的查询

(()=>{
const messageBox=document.getElementById('message-box');
const btStart=document.getElementById('bt-start');
const btAbort=document.getElementById('bt-abort');
常数间隔=5000;
让objTimeout=null;
btStart.onclick=()=>{
messageBox.textContent+=`\n[-]开始等待${interval}ms..`;
objTimeout=设置超时(()=>{
messageBox.textContent+=`\n[-]在${interval}ms`之后的消息;
},间隔时间)
}
btAbort.onclick=()=>{
if(objTimeout){
清除超时(objTimeout);
messageBox.textContent+=`\n[x]打印已中止`;
messageBox.textContent+=`\n[x]完成等待`;
}
}
})();
#消息框{
边缘:1米;
边框:1px纯色天蓝;
宽度:30em;
高度:10公分;
}
等待5s
中止

等待消息…
我在下面添加了一些简单的代码,这些代码可能会模拟您想要的执行,并将有助于解决您的查询

(()=>{
const messageBox=document.getElementById('message-box');
const btStart=document.getElementById('bt-start');
const btAbort=document.getElementById('bt-abort');
常数间隔=5000;
让objTimeout=null;
btStart.onclick=()=>{
messageBox.textContent+=`\n[-]开始等待${interval}ms..`;
objTimeout=设置超时(()=>{
messageBox.textContent+=`\n[-]在${interval}ms`之后的消息;
},间隔时间)
}
btAbort.onclick=()=>{
如果(obj