Javascript 异步和同步功能节点JS

Javascript 异步和同步功能节点JS,javascript,node.js,asynchronous,extract,synchronous,Javascript,Node.js,Asynchronous,Extract,Synchronous,我运行了几个函数从Nexus下载zip文件,然后解压缩zip文件的内容,最后搜索特定的文件类型。所有函数都工作,但是由于某种原因,同步搜索不会产生任何结果。如果我只是在一个脚本中运行下载和提取功能,然后在另一个脚本中执行搜索,我将得到预期的结果。我几乎可以肯定这是因为搜索是同步的,而下载和提取都是异步的。在下载和提取功能运行之后,是否有一种快速的方法在末尾添加find功能?代码如下: //npm模块 常数fs=需要('fs-extra'); const download=需要(“下载”); c

我运行了几个函数从Nexus下载zip文件,然后解压缩zip文件的内容,最后搜索特定的文件类型。所有函数都工作,但是由于某种原因,同步搜索不会产生任何结果。如果我只是在一个脚本中运行下载和提取功能,然后在另一个脚本中执行搜索,我将得到预期的结果。我几乎可以肯定这是因为搜索是同步的,而下载和提取都是异步的。在下载和提取功能运行之后,是否有一种快速的方法在末尾添加find功能?代码如下:

//npm模块
常数fs=需要('fs-extra');
const download=需要(“下载”);
const unzipper=require('unzipper');
const path=require('path');
//自定义变量
常量工件='SOME_FILE.zip';
const repo=“某些NEXUS存储库”;
常量url=”http://SOME URL/repository/”;
const directory='SOME directory';
//获取工件并将其提取到本地目录函数
const getArtifact=async()=>{
const getArtifact=等待下载(url+repo,“./unzip”)
const file=await fs.writeFileSync(目录+工件,等待下载(url+repo))
const readStream=wait fs.createReadStream(目录+工件).pipe(unzippers.Extract({path:
目录})
}
//查找完成下载和解压缩后应运行的函数
const findFile=函数(dir,pattern){
var结果=[];
fs.readdirSync(dir).forEach(函数(dirInner){
dirInner=path.resolve(dir,dirInner);
var stat=fs.statSync(dirInner);
console.log(stat)
if(stat.isDirectory()){
结果=结果.concat(findFile(dirInner,pattern));
}
if(stat.isFile()&&dirInner.endsWith(模式)){
结果:推(dirInner);
}
});
console.log(结果)
返回结果;
};
//在新的下载和解压缩之前清除目录的内容
fs.emptyDirSync(目录)
//调用下载和提取功能

getArtifact()
您使用什么ide编写代码?我复制粘贴了第一个代码块,大部分代码都是无用的,在getArtifact中还使用了变量getArtifact,使用了wait-on-sync方法,并为它们分配了未使用的变量。尝试先修复代码,然后编辑您的帖子如果您进行了复制/粘贴,那么我不希望它们工作,因为下载工件的URL指向一个本地Nexus服务器,我从中取出了地址。另外,如果复制/粘贴,则工件、repo和目录变量也将不起作用……我使用IntelliJ IDE……当所有变量都就位时,第一个代码块工作正常……它在getArtifact()函数之后添加了同步findFile函数……我没有运行代码,我只是查看了一下,无论这些变量值是什么,
getArtifact
函数仍处于中断状态。就像我说的,你首先要给他们分配你从未使用过的变量。其次,如果你使用wait-on-sync方法,你可能可以做到这一点,但它没有添加任何内容,而且毫无用处。因此,我显然没有你那么专业(或者我不会问新手问题),但它工作得很好,即接触nexus并下载一个工件,然后将工件写入文件系统,然后解压写入文件系统的工件。它只需调用“getArtifact()”函数即可实现这一点。它按照“const getArtifact”、“const file”、“const readStream”的顺序执行所有操作……问题仍然存在,我有一个异步函数,需要在异步函数执行后执行一个同步函数。异步和同步函数在彼此独立执行时运行(如最初所述),即执行“getArtifact”,然后执行“findFile”……异步函数(“getArtifact”)输出为同步函数(“findFile”)提供所需的输入。您使用什么ide来编码?我复制粘贴了第一个代码块,大部分代码都是无用的,在getArtifact中还使用了变量getArtifact,使用了wait-on-sync方法,并为它们分配了未使用的变量。尝试先修复代码,然后编辑您的帖子如果您进行了复制/粘贴,那么我不希望它们工作,因为下载工件的URL指向一个本地Nexus服务器,我从中取出了地址。另外,如果复制/粘贴,则工件、repo和目录变量也将不起作用……我使用IntelliJ IDE……当所有变量都就位时,第一个代码块工作正常……它在getArtifact()函数之后添加了同步findFile函数……我没有运行代码,我只是查看了一下,无论这些变量值是什么,
getArtifact
函数仍处于中断状态。就像我说的,你首先要给他们分配你从未使用过的变量。其次,如果你使用wait-on-sync方法,你可能可以做到这一点,但它没有添加任何内容,而且毫无用处。因此,我显然没有你那么专业(或者我不会问新手问题),但它工作得很好,即接触nexus并下载一个工件,然后将工件写入文件系统,然后解压写入文件系统的工件。它只需调用“getArtifact()”函数即可实现这一点。它按照“const getArtifact”、“const file”、“const readStream”的顺序执行所有操作……问题仍然存在,我有一个异步函数,需要在异步函数执行后执行一个同步函数。异步和同步函数在彼此独立执行时运行(如最初所述),即执行“getArtifact”,然后执行“findFile”……异步函数(“getArtifact”)输出为同步函数(“findFile”)提供所需的输入。