【发布时间】:2021-11-04 02:48:18
【问题描述】:
我正在尝试使用 async.series 以顺序模式在不同文件中执行 2 个函数。 用例是将日志文件下载到本地,然后移动到文件夹中。
这些功能单独工作正常。 现在我的下一步是在 index.js 中要求这两个文件,并依次调用这两个函数。
这是将文件从 webdav 写入本地机器的代码:
const fs = require('fs');
const stream = require('stream');
const util = require('util');
const pipeline = util.promisify(stream.pipeline);
const { createClient } = require("webdav");
const path = require("path");
const client = createClient(
"https:/*/webdav/Sites/Logs", {
username: "*",
password: "*"
}
);
async function writeFiles(){
console.log('inside write functions');
let directoryData = await client.getDirectoryContents("/");
console.log('after directorydata' +directoryData);
await Promise.all(directoryData.map(start));
}
async function start(dir) {
let fileName = dir.filename;
console.log('inside start function');
var directory = path.join(__dirname,'/logs/')
if(fileName.includes('.log')){
try {
let fileName = dir.filename;
//console.log(fileName);
await pipeline(
client.createReadStream(fileName),
fs.createWriteStream(directory + fileName)
);
return directory;
console.log('done');
} catch (e) {
console.log(e);
}
}
}
module.exports = writeFiles;
这是创建文件夹并根据名称将日志文件移动到其中的代码:
const testFolder = './logs/';
const fs = require('fs');
const path = require("path");
var directory = path.join(__dirname,'/logs/');
async function sort (){
console.log('inside sort function sorting file');
await fs.readdir(directory, (err, files) => {
//console.log('sdcfe');
if(files){
console.log('filesss')
} else {
console.log('no filesss')
}
files.forEach(file => {
let fileFolder = file.split('-')[0];
var folder = fileFolder.replace('.', "");
var dir = directory+folder;
if (!fs.existsSync(dir)){
//console.log('inside if' + dir);
fs.mkdirSync(dir);
}
const currentPath = path.join(directory, file);
const destinationPath = path.join(directory, folder, file);
fs.rename(currentPath, destinationPath, function (err) {
if (err) {
throw err
} else {
return destinationPath;
console.log("Successfully moved the file!");
}
});
});
});
}
module.exports = sort;
这是 index.js 文件,需要上述两个文件并按顺序调用它们(一旦写入功能完成,我需要将日志文件移动到文件夹中)
'use strict';
// Initialize constants
const async = require('async');
const writeFiles = require('./webdavConnect2');
const sort = require('./sortingFiles');
// Initialize the program
let program = require('commander');
// Initialize the version
program.version('0.5.0');
program
.command('say')
.description('Batch command that can be used to zip, upload, import, and re-index for a given site import.')
.action(function () {
function webdavConnect() {
console.log('inside webdav function');
// write the files into local machine
writeFiles();
}
// move the files into folders
function sortingFiles() {
console.log('inside sort function');
sort();
}
async.series([
function(callback) {
webdavConnect(function(directory){
callback(null, directory);
})
},
function(callback) { sortingFiles(function(destinationPath){
callback(null,destinationPath);
})
}
], function(asyncErrorObj) {
// Was an error defined? If so, then throw it
if (asyncErrorObj !== null) { throw asyncErrorObj; }
console.log('END');
});
});
// Parse the command-line arguments
program.parse();
问题在于当前执行的是第一个函数而不是第二个函数。
【问题讨论】:
标签: javascript node.js async-await node-modules async.js