Tôi đã viết một mô-đun trong node.js thực hiện một số hoạt động mạng. Tôi đã viết một kịch bản nhỏ sử dụng mô đun này (biến số check
bên dưới). Có vẻ như sau:node.js: chương trình hoặc thoát đột ngột hoặc chỉ bị treo
check(obj, function (err, results) {
// ...
console.log("Check completed");
});
Đây là một điều thú vị. Khi mã này thực hiện như một phần của thử nghiệm mocha
, kiểm tra sẽ thoát như mong đợi. Tôi thấy bản tường trình được in và quá trình thoát.
Khi mã được thực thi dưới dạng tập lệnh nút độc lập, câu lệnh nhật ký được in, nhưng quá trình này chỉ bị treo.
Khi tôi cố gỡ lỗi và tôi bắt đầu chương trình bằng cách sử dụng --debug-brk
và sử dụng node-inspector
, nó sẽ thoát sớm! Tôi thấy rằng process.on 'exit'
được gọi. Nó thoát ra trong khi một số callback nội bộ bên trong module vẫn chưa được gọi. Vì vậy, các báo cáo đăng nhập ở trên không được in hoặc.
Tôi bị kẹt ngay bây giờ và không chắc chắn tại sao điều này xảy ra. Có ai nhìn thấy hành vi tương tự không?
Có cách nào khác để tìm hiểu điều gì đang giữ nút mở? – Aishwar
Nếu bạn có trình kiểm tra nút và có thể đính kèm vào quy trình và thiết lập một điểm ngắt trong mã vòng lặp sự kiện của nút, có thể. Tôi đã không bao giờ thành công theo dõi một trong những xuống. Đó là một trong hai điều rõ ràng như mở một kết nối DB nhưng không bao giờ rõ ràng đóng nó, hoặc tôi chỉ làm 'process.exit()' và tiếp tục cuộc sống của tôi. –
process._getActiveHandles() và process._getActiveRequests() xem http://stackoverflow.com/questions/17960452/how-can-i-get-a-list-of-callbacks-in-the-node-work-queue -hoặc-why-wont-nút-ex – aaron