为什么绑定功能会停止为以下代码工作?
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...
行的评论,它就可以了。
答案 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});