Tôi đang sử dụng spawn
để sinh ra một quy trình chạy dài gửi đầu ra theo thời gian tới stdio, và được đọc và xử lý bởi tập lệnh nodejs của tôi. Phần khó khăn là tôi không thể đảm bảo rằng lệnh được gửi sẽ luôn hợp lệ. Làm thế nào tôi có thể bắt lỗi trong sinh sản? Tốt hơn là điều này sẽ không liên quan đến việc cài đặt một trình xử lý ngoại lệ toàn cục, vì tôi không muốn xử lý bất kỳ ngoại lệ nào khác. (Nếu đó là cách duy nhất, tôi sẽ cần phải tìm ra khi quá trình sinh sản đã bắt đầu một cách chính xác và sau đó gỡ cài đặt trình xử lý, đó là một mớ hỗn độn mà tôi không muốn tham gia.)Làm thế nào để bắt ENOENT với nodejs child_process.spawn?
Mã tôi muốn chạy sẽ là một cái gì đó như thế này:
var spawn = require('child_process').spawn;
try {
spawn("zargle");
} catch (e) {
console.error("I'm handling the error!");
}
Nhưng điều này chỉ đặt ra một uncaughtException đâu đó trong vòng lặp sự kiện nút, có lẽ vì cuộc gọi là async và thậm chí không cố gắng để bắt đầu quá trình trẻ em trên lát thời gian kịch bản của tôi.
Trường hợp ngoại lệ duy nhất cần được ghi lại là khi sinh sản không bắt đầu quá trình (ví dụ: tên không chính xác và ENOENT được ném). Tôi không (tại thời điểm này) liên quan đến bất kỳ vấn đề nào mà quá trình sinh sản có thể tự tạo ra.
tương tự nhưng khác nhau: How do I debug "Error: spawn ENOENT" on node.js?
Tôi biết chính xác lý do tại sao tôi nhận được ENOENT, và tôi biết những gì để thay đổi có lỗi không xảy ra. Câu hỏi của tôi là làm thế nào để trả lời một cách duyên dáng tình huống này nếu lỗi là không thể tránh khỏi.
Vì vậy, bạn hoàn toàn đúng. Tôi thậm chí không bao giờ cố gắng điều này bởi vì nó đã không xảy ra với tôi rằng đẻ trứng sẽ chọn lọc ném một ngoại lệ hoặc không phụ thuộc vào việc một trình xử lý lỗi đã được đính kèm. (Nó sẽ là tốt đẹp nếu các tài liệu sẽ đề cập đến những thứ như thế này để giúp chúng tôi nút mới.) – Fizzbuzz97
FWIW 'lỗi' sự kiện luôn luôn là một sự kiện đặc biệt ở chỗ nếu không có trình nghe sự kiện' lỗi' (và không có 'uncaughtException' xử lý sự kiện trên 'process') khi nó được phát ra, lỗi sẽ được ném. Có một phần chuyên biệt về lỗi [ở đây] (https://nodejs.org/docs/latest/api/errors.html) trong tài liệu nút. – mscdex
Tôi chỉ thử điều này nhưng nó không hoạt động. Điều này có hiệu quả nếu spawn cố chạy một tệp không tồn tại? – Janneman