Я пытаюсь:
- получить список путей к файлам
- перебрать их и вернуть массив обещаний, которые запускают поток для каждого файла
- передать поток в хеш-функцию
- передать в сборщик чанков, который разрешает обещание с помощью производного значения хеш-функции при конечном событии
Моя установка прекрасно работает с одним путем и файлом, но снесколько путей и файлов Я получаю ложные результаты.
Кажется, что поток чтения файла распределяется между всеми экземплярами обещания. Я хотел бы открыть отдельный поток для каждого файла и разрешить их, когда все потоки будут завершены.
Совместимо ли это с тем, как потоки узлов работают в целом? Кроме того, я уверен, что все, что после первого fs.createReadStream
не имеет отношения к проблеме.
const fs = require("fs-extra")
const { Transform } = require("stream")
const hash = require("crypto")
.createHash("sha256")
.setEncoding("hex")
module.exports = {
async start({ filePath }) {
const hashes = await Promise.all(
filePath.map(path => {
return new Promise((resolve, reject) => {
fs.createReadStream(path)
.pipe(hash)
.pipe(
(() => {
const data = []
return new Transform({
transform(chunk, encoding, done) {
data.push(chunk)
done()
},
flush(done) {
resolve(data.toString())
done()
},
})
})()
)
})
})
)
console.log(hashes)
},
}