1

注:私はすでにこの問題の解決策を見つけており、後世のためにここに投稿しています。選択した回答を参照してください。


次の (簡略化された) コードは、キャッチ不能な「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()発生したエラーを取得するコールバックを渡します。コールバックはエラーを受け取りましたが、スローされるのを防ぎませんでした。
4

1 に答える 1