代码之家  ›  专栏  ›  技术社区  ›  Jitendra

错误:在NodeJs中找不到模块“async_hooks”

  •  0
  • Jitendra  · 技术社区  · 8 年前

    我试图从官方的node api文档中运行异步钩子的测试代码,结果发现错误 Error: Cannot find module 'async_hooks' 在控制台中。我已经包括 const async_hooks = require('async_hooks'); 在我剧本的顶端。这是我的代码:

    const async_hooks = require('async_hooks');
    
    // Return the ID of the current execution context.
    const eid = async_hooks.executionAsyncId();
    
    // Return the ID of the handle responsible for triggering the callback of the
    // current execution scope to call.
    const tid = async_hooks.triggerAsyncId();
    
    // Create a new AsyncHook instance. All of these callbacks are optional.
    const asyncHook =
        async_hooks.createHook({ init, before, after, destroy, promiseResolve });
    
    // Allow callbacks of this AsyncHook instance to call. This is not an implicit
    // action after running the constructor, and must be explicitly run to begin
    // executing callbacks.
    asyncHook.enable();
    
    // Disable listening for new asynchronous events.
    asyncHook.disable();
    
    //
    // The following are the callbacks that can be passed to createHook().
    //
    
    // init is called during object construction. The resource may not have
    // completed construction when this callback runs, therefore all fields of the
    // resource referenced by "asyncId" may not have been populated.
    function init(asyncId, type, triggerAsyncId, resource) { }
    
    // before is called just before the resource's callback is called. It can be
    // called 0-N times for handles (e.g. TCPWrap), and will be called exactly 1
    // time for requests (e.g. FSReqWrap).
    function before(asyncId) { }
    
    // after is called just after the resource's callback has finished.
    function after(asyncId) { }
    
    // destroy is called when an AsyncWrap instance is destroyed.
    function destroy(asyncId) { }
    
    // promiseResolve is called only for promise resources, when the
    // `resolve` function passed to the `Promise` constructor is invoked
    // (either directly or through other means of resolving a promise).
    function promiseResolve(asyncId) { }
    

    我很困惑我需要安装 npm install async_hooks 但我认为这是构建模块中的nodeJs,所以我们只需要在顶部要求。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jitendra    8 年前

    经过大量搜索,我发现我使用的是较旧版本的nodejs,并在Node version 8.x中首先引入了async_hooks模块。在使用nvm(Node version manager)升级版本后,问题得到解决。 您可以通过以下链接安装和管理多个nodejs版本: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-with-nvm-node-version-manager-on-a-vps

    如果已安装nvm,则可以按如下方式打开版本8.x:

    要列出所有已安装的版本:

     nvm ls
    
    v4.4.4
    ->       v4.4.7
             v8.8.0
             system
    default -> 4.4.7 (-> v4.4.7)
    node -> stable (-> v8.8.0) (default)
    stable -> 8.8 (-> v8.8.0) (default)
    

    打开特定的开关:

    nvm use v8.8.0
    Now using node v8.8.0 (npm v5.4.2)
    
    推荐文章