2015-06-10 89 views
7

是否有一個本地函數可以從Node.js代碼執行,該代碼輸出一個數組或一個包含有關當前應該在事件循環中的信息的對象?如何從Node.js代碼訪問Event Loop?

+0

我希望答案是「不」。你爲什麼要這樣的事情? –

回答

8

最近有a request查看io.js項目中事件循環中的內容。有功能的兩個名字浮出水面,在this comment

  1. process._getActiveHandles()得到你還活着

  2. process._getActiveRequests()得到有關活動libuv請求您的信息句柄。

這是你可以從事件循環收集的最多,我猜。

說明:兩者都是未公開的函數,您不能在生產代碼中依賴它們。

5

您正在尋找uv_loop

您可以調用一個UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg);方法來迭代事件循環。

不幸的是,它並沒有真正暴露給JavaScript - 所以除非你想爲了好玩(和fork node/io.js)這麼做,否則不會。

您可以將調用包裝到事件循環中並監控那些,但這很慢,甚至沒有關閉 - 實際循環不在JS領域,只有很小的部分 - 甚至是部分(如微任務隊列)在C++中。

很多人認爲事件循環就像一個數組的 - 它實際上更像是:

enter image description here

這是一個更容易勾上process.nextTick和定時器比在投票部分如上所述。