注:私はすでにこの問題の解決策を見つけており、後世のためにここに投稿しています。選択した回答を参照してください。
次の (簡略化された) コードは、キャッチ不能な「write EPIPE」(および一部のシナリオでは「write EOF」) エラーをスローします。
const { exec } = require("child_process");
const veryLargeString = "x".repeat(10 * 1024 * 1024);
const p = exec("gibberishThatWillFailImmediately");
p.stdin.write(veryLargeString);
問題に対する私の失敗した試み:
stdin.destroyed
書き込み前のフラグのチェックstdin.writeableEnded
書き込み前のフラグのチェックstdin.writeableEnded
入力をチャンク化し、各チャンクの前にチェックします。これは、非決定的な動作につながります。stdin.write(data)
try-catch で行をラップするstdin.end(data)
の代わりに呼び出すstdin.write(data)
stdin.write()
発生したエラーを取得するコールバックを渡します。コールバックはエラーを受け取りましたが、スローされるのを防ぎませんでした。