var promisePipe = require("promisepipe");
var fs = require("fs");
var crypt = require("crypto");
var // ....
files = ['/mnt/Storage/test.txt', '/mnt/Storage/test2.txt', '/mnt/Storage/test3.txt']
var promises = files.map(function(file_enc) {
return new Promise(function(resolve, reject) {
var file_out = file_enc + '.locked';
promisePipe(
fs.createReadStream(file_enc),
crypt.createCipheriv(alg, genhashsub, iv),
fs.createWriteStream(file_out),
).then(function(streams){
console.log('File written: ' + file_out);
// Promise.resolve(file_out); // tried but doesnt seem to do anything
}, function(err) {
if(err.message.substring(0, 7) === 'EACCES:') {
console.log('Error (file ' + file_out + '): Insufficient rights on file or folder');
} else {
console.log('Error (file ' + file_out + '): ' + err);
}
// Promise.reject(new Error(err)); // tried but doesnt seem to do anything
});
})
});
Promise.all(promises).then(final_function(argument));
Я пытаюсь зашифровать файлы, содержащиеся в массиве с именем files
.
. Для простоты я добавил их вручную в этом примере.
Что я хочучтобы произойти:
- Создать
promises
массив для вызова с promises.all
при завершении - Итерация по массиву
- Создать обещание для этой операции ввода-вывода
- Чтение файла \
- Шифрование файла - все выполнено с использованием потоков, из-за больших файлов (+ 3 ГБ)
- Запись файла /
- По окончании записи разрешить обещаниедля этой операции ввода-вывода
- Запустить завершающий сценарий, когда все обещания разрешены (или отклонены)
Что происходит:
- Шифрованиепервого файла начинается
.then(final_function(argument))
называется - Шифрование первого файла заканчивается
Все файлы правильно шифруются и впоследствии могут быть расшифрованы.
Кроме того, отображаются ошибки, а также подтверждения записи.
Я искал оба стека, как мыКак Google, так и я нашел несколько похожих вопросов (с ответами).Но они не помогают, потому что многие устарели.Они работают, пока я не перепишу их в обещания, а потом я вернусь к тому, с чего начал.
Я также мог бы предложить 8 различных способов выполнения этой задачи, используя модули npm или ванильный код, но все они так или иначе терпят неудачу.