Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Node.js 如何使代码在从EventEmitter解析或拒绝后停止运行_Node.js - Fatal编程技术网

Node.js 如何使代码在从EventEmitter解析或拒绝后停止运行

Node.js 如何使代码在从EventEmitter解析或拒绝后停止运行,node.js,Node.js,我曾试图制作一个下载程序,但现在我很难将其下载删除。 我的想法很简单。删除文件,并停止下载过程(如果有)。 我当前的问题是,在收到已删除下载事件后,代码仍在继续,尽管我返回了“已拒绝” 这是针对Node.js的,我不使用像bluebird之类的外部模块,因此如果可能,请提供简单的javascript代码 功能下载(id){ 返回新承诺(异步(解析、拒绝)=>{ //定义*链接*和*大小的一些逻辑* process.on(“下载已删除)”,($id)=>{ 控制台日志(“已删除”) 如果(id==

我曾试图制作一个下载程序,但现在我很难将其下载删除。 我的想法很简单。删除文件,并停止下载过程(如果有)。 我当前的问题是,在收到
已删除下载
事件后,代码仍在继续,尽管我返回了“已拒绝”

这是针对Node.js的,我不使用像
bluebird
之类的外部模块,因此如果可能,请提供简单的javascript代码

功能下载(id){
返回新承诺(异步(解析、拒绝)=>{
//定义*链接*和*大小的一些逻辑*
process.on(“下载已删除)”,($id)=>{
控制台日志(“已删除”)
如果(id==$id){
控制台日志(“匹配”)
返回拒绝(“删除下载”);
}
console.log(“不匹配”)
});
//从这里开始,当接收到事件时,代码应该停止,因为返回了reject
for(让索引进入链接){
log(“开始”,“索引,大小-links.length+数字(索引)+1”);
this.\u current=path.join(this.\u目录,字符串(id),`${(索引,size-links.length+Number(索引)+1)}.${/\([a-zA-Z]+)(\.webp)*$/.exec(链接[index])[1]});
等待global.toolkits.download(链接[索引],此._当前,false`https://my_website/${String(id)}.html`)。然后((响应)=>{
此值为0。_current=null;
开关(响应){
案例“已下载”:
案例“文件存在”:{
控制台日志(“结束”);
让复制=[…链接];
复制拼接(0,索引);
emit(“下载进度”,id,(索引,大小-links.length+Number(索引)+1),大小);
}
}
});
}
此值为0。_current=null;
如果(此过程长度){
this.download(this._进程[0]);
本工艺拼接(0,1);
}
控制台日志(“返回”,id);
返回解析(“下载”);
//到这里来!
});
删除(id){
进程.emit(“已删除下载”,id);
//eslint禁用下一行无未使用的变量
this.\u process=this.\u process.filter((值、索引、数组)=>{return value!==id;});
rmdirSync(path.join(this._目录,字符串(id)),{recursive:true});
}

在您的案例中,有几种可能的解决方案:
1.在单独的或中运行下载进程,并在事件中终止进程
2.创建一些全局变量,如
let DOWNLOAD_ALLOWED=true
,并在每个加载步骤之前验证其状态(当您迭代链接时)。在系统事件中,将
DOWNLOAD_ALLOWED
更改为
false
并退出加载脚本