Javascript 多异步执行节点
我已根据建议更新了代码段:Javascript 多异步执行节点,javascript,arrays,node.js,function,async-await,Javascript,Arrays,Node.js,Function,Async Await,我已根据建议更新了代码段: const fs=require('fs'); const replaceExt=require('replace-ext'); 函数newFile(){ const directoryFile=fs.readdirSync('./zipped').toString(); const dirarray=directoryFile.split(','); 控制台日志(dirarray); 返回承诺。解决(Dirrarray); //控制台日志(dirarray类型);
const fs=require('fs');
const replaceExt=require('replace-ext');
函数newFile(){
const directoryFile=fs.readdirSync('./zipped').toString();
const dirarray=directoryFile.split(',');
控制台日志(dirarray);
返回承诺。解决(Dirrarray);
//控制台日志(dirarray类型);
//log(directoryFile);
}
函数dirArr(dirarray){
dirarray.forEach((directoryFile)=>{
fs.rename('./zipped/'+directoryFile,replaceExt('./zipped/'+directoryFile,.zip'),函数(err){
如果(错误)抛出错误;
console.log(目录文件)
});
})
}
以下是一个使用基于promise版本的fs
库的实现,该库可作为
require('fs').promises;
我已经编写了两个函数。第一个函数列出目录中的文件,并返回解析为完全限定路径数组的承诺。第二个函数使用新的文件扩展名重命名这些文件,并返回解析为重命名路径数组的承诺
const fsp = require('fs').promises;
const path = require('path');
const replaceExt = require('replace-ext');
// takes an argument that specifies the directory to list
// returns a promise that resolves to a list of files in that directory
function listFiles(dir) {
// make dir into a fully qualified path
let fullDir = path.resolve(dir);
return fsp.readdir(fullDir).then(files => {
// make into full path
return files.map(f => {
return path.join(fullDir, f);
});
});
}
// takes an array of filenames and a new file extension
// renames all the files to have the new extension
// returns array of new filenames
async function renameFiles(files, newExt) {
// build array of renamed filenames
const newFiles = files.map(f => {
return replaceExt(f, newExt);
});
for (let i = 0; i < files.length; i++) {
await fsp.rename(files[i], newFiles[i]);
}
return newFiles;
}
// Example usage
listFiles("./zipped").then(files => {
return renameFiles(files, ".zip");
}).then(newFiles => {
console.log(newFiles);
}).catch(err => {
console.log(err);
})
const fsp=require('fs')。承诺;
const path=require('path');
const replaceExt=require('replace-ext');
//接受一个参数,该参数指定要列出的目录
//返回解析为该目录中文件列表的承诺
函数列表文件(dir){
//使dir成为完全限定路径
设fullDir=path.resolve(dir);
返回fsp.readdir(fullDir)。然后(files=>{
//进入完整路径
返回文件.map(f=>{
返回路径join(fullDir,f);
});
});
}
//接受文件名数组和新的文件扩展名
//重命名所有文件,使其具有新的扩展名
//返回新文件名数组
异步函数重命名文件(文件、新文本){
//生成重命名文件名的数组
const newFiles=files.map(f=>{
返回replaceExt(f,newExt);
});
for(设i=0;i{
返回重命名文件(文件“.zip”);
}).then(newFiles=>{
console.log(新文件);
}).catch(错误=>{
控制台日志(err);
})
使用fs.promises
界面可以使用返回承诺的fs
函数<代码>异步如果您没有使用承诺,则对您没有好处。当我尝试使用fsPromises时,我收到一个npm错误,表示它不在注册表中。我不知道在fs异步回调中使用它是绝对必要的。由于我无法获得fsp承诺,我还有什么其他选择?Itsconst fsp=require('fs')。承诺代码>。都在nodejs文档里。没有新的安装。两个控制台的日志条目都未定义
您不会从这些函数返回任何值,因此readDirValue
和strArrValue
自然将未定义
。。。与常规函数一样,如果不返回任何内容,则实际上是在执行returnundefined
以及execAsyncTasks().then()代码>??无需调用。既然您没有将函数传递给。那么
…这正是我想要做的。我会仔细检查一下,看看我的失误在哪里。谢谢你的帮助,我向你保证,它将被用于参考和学习。