【发布时间】:2018-06-06 20:01:27
【问题描述】:
我正在尝试使用更改的配置数据作为输入来安排一堆任务按时间间隔运行:
let configData = initConfig(); // Initialize configuration data from file
setInterval(taskA.bind(null, configData), TASK_A_WAIT); // Task using config data
setInterval(taskB.bind(null, configData), TASK_B_WAIT); // Task using config data
setInterval(taskC.bind(null, configData), TASK_C_WAIT); // Task using config data
setInterval(refreshConfig.bind(null, (error, result) => { // Update config data
if (error) handleError(error);
else configData = result;
}), CONFIG_REFRESH_WAIT);
目标是使用最后一个setInterval() 定期更新配置数据,以便前三个setInterval() 始终使用最新数据。但它会起作用吗?
在 javascript 的语义中,上面是否真的会每隔一段时间重新将函数绑定到最新的configData 对象?在这种情况下什么时候发生绑定?
【问题讨论】:
-
否,因为
configData = result覆盖引用,而不是值。任务仍将绑定到旧引用。 -
@PatrickRoberts 因此,如果我理解正确,绑定将发生一次,但因为绑定是通过引用进行的,并且适当引用处的值随着最后一次
setInterval()刷新配置数据的每次传递而更新,输入三个任务的configData的值确实会在每个时间间隔内都是最新的? -
绑定是按值...排序的。问题是您的
configData的引用正在更改,但.bind()将保留旧的引用。 -
@PatrickRoberts 所以如果
configData是一个对象,因为引用会改变,所以它不会工作。但是如果configData不是对象,它会起作用吗?介意写一个答案,这样我就可以投票了吗? -
configData是什么无关紧要,它不会起作用。
标签: javascript node.js callback