2017-10-16 4 views
0

NodeJsのfsモジュールの読み取り/書き込みストリームを使用して、すべてのファイルを送信元から宛先にコピーしようとしています。すべてのファイルをソースディレクトリからコピー先ディレクトリにコピーする際に、プロミスが解決されない。約束を使ってこれをどのようにすることができますか?

+0

私たちにあなたがこれまでにやっているいくつかのコードを入力してください。 – Krusader

答えて

1

、これを試してみてください

const fs = require('fs'); 
const sourceDirPath = process.argv[2]; 
const DestinationDirPath = process.argv[3]; 

const checkInputPaths =()=>{ 
    return new Promise(function(resolve, reject) { 
    const message = 'please provide source and destination dir path'; 
    if (!(sourceDirPath && DestinationDirPath)) { 
     console.log(message); 
     return reject(message); 
    } 

    return resolve(); 
    }); //end of promise 

}; 

const readDirFiles = (files)=> { 
    return new Promise(function(resolve, reject) { 
    return fs.readdir(sourceDirPath, function(err, files) { 
     if (err) { 
     return reject(err); 
     } 

     return resolve(files); 
    }); 
    }); 
}; 

const writeLog = (file, log, fileIndex)=> { 
    return new Promise(function(resolve, reject) { 
    let dataToAppend = ''; 
    if (fileIndex == 0) { 
     dataToAppend += `${log} \n${fileIndex + 1}. Copied file ${file}.`; 
    } else { 
     dataToAppend = `\n${fileIndex + 1}. Copied file ${file}.`; 
    } 

    return fs.appendFile(DestinationDirPath + '/log.txt', dataToAppend, (err) => { 
     if (err) { 
     console.log(`Error while appending to file: ${file}`); 
     return resolve(); 
     } 

     console.log(`The file: ${file} was appended to log file!`); 
     return resolve(); 
    }); 
    }); 
}; 

const writeFileToDir = (files, log, fileIndex)=> { 
    return new Promise(function(resolve, reject) { 
    if (!fileIndex) { 
     fileIndex = 0; 
    } 
    const file = files[fileIndex]; 

    return fs.copyFile(`${sourceDirPath + file}`, `${DestinationDirPath + file}`, function(err) { 
     if (err) { 
     console.log(`Error while copying file: ${file} from ${sourceDirPath} to ${DestinationDirPath}`); 
     return (++fileIndex < files.length) ? writeFileToDir(files, log, fileIndex) : resolve(); 
     } 
     return writeLog(file, log, fileIndex, log).then(()=>{ 
     return (++fileIndex < files.length) ? writeFileToDir(files, log, fileIndex) : resolve(); 
     }); 
    }); 
    }); 
}; 

const copyDir =()=> { 
    console.log('Started disctory copying process.......'); 
    const log = `:: Files copying from ${sourceDirPath} to ${DestinationDirPath}`; 
    return readDirFiles().then((files)=>{ 
    return writeFileToDir(files, log).then(()=>{ 
     console.log(`All files copied from ${sourceDirPath} to ${DestinationDirPath} successfully`); 
     return Promise.resolve(); 
    }).catch((err)=>{ 
     console.log(`Error while copying files from source to destination : ${err}`); 
     return Promise.reject(err); 
    }); 
    }).catch((err)=>{ 
    console.log(`Error while copying files from source to destination : ${err}`); 
    return Promise.reject(err); 
    }); 
}; 


copyDir(); 
関連する問題