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

时间:2018-02-24 22:22:42

标签: javascript node.js function 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 个答案:

答案 0 :(得分:1)

我认为这是因为bind会创建一个新函数,所以在你的第二个例子中它实际上并没有激活该函数。在第一种情况下它会被解雇。

答案 1 :(得分:1)

您确定它是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});