我用这段代码绑定一个函数
changeLabelAndReassign()
然后,在此过程中,当我调用此代码时
BarChart.vue
以下函数称为
this.process[id].on('started', this.onStartedProcess.bind(this)); // I want to pass an extra variable here.
在绑定时,是否可以将额外的变量传递给that.emit('started', {startTime:time, instance: that});
函数?像
onStartedProcess(info) {
console.log(info.startTime);
}
并在因为emit而调用onStartedProcess
时使用该参数,例如
this.process[id].on('started', this.onStartedProcess.bind(this,otherParameter));
我将这个post重新命名为绑定方法,但仍无法找到实现我想要的方法。
修改 这不适合我。这就是我试过的
onStartedProcess
onStartedProcess(info, otherParameter) {
console.log(info.startTime);
console.log(otherParameter);
}
永远不会被称为
答案 0 :(得分:1)
是。您正在描述bind
函数的工作原理。首先传递上下文(this
),然后传递所需的所有其他参数。
阅读文档here
问题在于您绑定的函数中的参数顺序。
onStartedProcess(info, otherParameter) {
// with your current `.onStartedProcess.bind(this, 5)
// you are binding `info` argument to `5`
console.log(otherParameter); // I was expecting the get the 5 here
}
如果您想将otherParameter
设置为5
,则需要正确绑定第二个参数:.bind(thisArg, firstArg, SecondArg)
关于未调用的回调。 这是您的方案的一种解决方案:
// parent.js
const { fork } = require('child_process');
const subprocess = fork('child.js');
subprocess.send('start');
subprocess.send({ hello: 'world' });
// child.js
process.on('message', onStartedProcess.bind(null, 'first arg', 5));
function onStartedProcess(info, otherParameter, message) {
console.info('callback args:', info, otherParameter, message);
}
运行node parent.js
你应该得到这个输出:
callback args:first arg 5 start
callback args:first arg 5 {hello:'world'}
详细了解节点流程消息here