Ответ 1
Проверьте потоки преобразования. Они дают вам возможность запускать асинхронный код на куске, а затем вызывать обратный вызов, когда вы закончите. Вот документы: https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callback
В качестве простого примера вы можете сделать что-то вроде:
const Transform = require('stream').Transform
class WorkerThing extends Transform {
_transform(chunk, encoding, cb) {
asyncFunction(chunk, cb)
}
}
const workerThing = new WorkerThing()
fs.createReadStream('eupmc_lite_metadata_2016_04_15.json')
.pipe(JSONstream.parse())
.pipe(workerThing)