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

在这种情况下,为什么绑定函数对NodeJS停止工作

  •  0
  • xpt  · 技术社区  · 6 年前

    为什么bind函数停止处理以下代码?

    function exitHandler(options, err) {
      console.log('exit');
      if (options.cleanup) console.log('clean');
      if (err) console.log(err.stack);
      if (options.exit) process.exit();
    }
    
    //do something when app is closing
    //process.on('exit', exitHandler.bind(null,{cleanup:true})); process.exit()
    
    // or
    process.on('exit', function() {
      exitHandler.bind(null,{cleanup:true})
    });
    

    如果我取消对 process.on('exit', exitHandler.bind... 行,它会很好用的。

    2 回复  |  直到 6 年前
        1
  •  1
  •   E. Sundin    6 年前

    我认为这是因为绑定创建了一个新函数,所以在第二个示例中,它实际上并没有启动该函数。在第一种情况下,它确实会被解雇。

        2
  •  1
  •   Daniel Conde Marin    6 年前

    你确定是吗 bind 而不是 call 您想要什么:

      function exitHandler(options, err) {
        console.log('exit');
        if (options.cleanup) console.log('clean');
        if (err) console.log(err.stack);
        if (options.exit) process.exit();
      }
    
      process.on('exit', function() {
        exitHandler.call(null,{cleanup:true})
      });
    

    编辑:

    如果您没有使用上下文( this )您可以正常调用该函数:

    exitHandler({cleanup:true});