Làm cách nào để có được danh sách các lệnh gọi lại trong hàng đợi công việc Node? (hoặc, Tại sao Node không thoát?)


84

Nó nói trên trang Node.js about :

Nút thoát khỏi vòng lặp sự kiện khi không có lệnh gọi lại nào để thực hiện.

Có cách nào để tìm ra lệnh gọi lại nào đang ngăn Node thoát ra không?


2
đây là một câu hỏi tuyệt vời ... cùng một câu hỏi mà tôi đã bắt đầu hỏi khi nghiên cứu vòng lặp sự kiện ... làm cách nào để xem hàng đợi? không chắc tại sao mọi người sẽ bỏ phiếu điều này. ;)
— tbarbe

Câu trả lời:


90

Bạn có thể sử dụng process._getActiveHandles()vàprocess._getActiveRequests()

Xem cuộc thảo luận này trong danh sách gửi thư node.js.

cập nhật: có một gói tốt cho việc này - https://github.com/mafintosh/why-is-node-running


2
Cảm ơn bạn rất nhiều, đây là những gì tôi đã tìm kiếm. Đầu # Node.js trên freenode có ai đó đang cố gắng ghi nhớ những cuộc gọi và coun't khá đạt được điều đó: "totally spacing on the name, it's like "process._getOpenHandles()" or something equally hard to remember". Tôi đã tìm kiếm trên Google để cố gắng tìm cuộc gọi thực sự và không thể. Cảm ơn một lần nữa.
— Dmitry Minkovsky,

2
Tôi không thể nhớ tên cũng - repl nút đã qua sử dụng, gõ hoàn process._ + tab :)
— Andrey Sidorov

Hah, tôi đã không nghĩ đến REPL tự động hoàn thành, đó tất nhiên là cách tốt nhất để làm điều đó. Tôi đã xem xét node_globals.jsvà không tìm thấy nó. Bây giờ tôi đang chuyển đổi cơ sở mã nút, biết những gì cần tìm và thấy rằng chúng được định nghĩa trong node.cc. process._getActiveHandles () là src/node.cc:2345: NODE_SET_METHOD(process, "_getActiveHandles", GetActiveHandles);Hah! Thông minh.
— Dmitry Minkovsky

@dimadima hiện có một phiếu phản đối giữa câu hỏi và câu trả lời. Vì vậy, trước hết, nó không phải là "con người", mà là "một con người." Và StackOverflow là một trong 100 trang web được truy cập nhiều nhất trên thế giới, bạn thực sự không nên làm khó đến mức ai đó, ở đâu đó, không thích câu hỏi này.
— djechlin

2
có tài liệu chính thức nào về các chức năng này không?
— tbarbe

11

Có một wtfnode mô-đun npm để hiển thị những gì giữ cho ứng dụng nodejs chạy khi bạn gửi SIGINT (ctrl-c) đến nó.

Nó sử dụng nội bộ process._getActiveHandles()như đã đề cập trong câu trả lời của @ andrey-sidrov. Lợi ích của việc sử dụng wtfnodelà nó cung cấp đầu ra dễ đọc.


Có process._getActiveHandles (). Length cung cấp tổng số tất cả các quy trình hoặc chỉ cho quy trình mà nó được gọi
— Shantanu Madane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.