以下を検討してください。
var asyncFunction = function(data, callback) {
doAsyncyThing(function(data){
// do some stuff
return callback(err)
})
}
fs.createReadStream('eupmc_lite_metadata_2016_04_15.json')
.pipe(JSONstream.parse())
.on('data', asyncFunction) // <- how to let asyncFunction complete before continuing
ストリームは、asyncFunctionが完了したことをどのようにして知るのですか?ストリーム内から非同期関数を使用する方法はありますか?
変換ストリームを確認してください。チャンクで非同期コードを実行し、完了したらコールバックを呼び出すことができます。ここにドキュメントがあります: 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)