gpt4 book ai didi

javascript - .bind() 什么时候运行?

转载 作者:搜寻专家 更新时间:2023-10-31 23:36:39 25 4
gpt4 key购买 nike

我正在尝试使用更改配置数据作为输入来安排一系列任务按时间间隔运行:

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 的语义中,上面的代码实际上会在每个时间间隔重新将函数绑定(bind)到最新的 configData 对象吗?在这种情况下什么时候会发生绑定(bind)?

最佳答案

由于 bind() 没有包含在另一个函数中,所以它是就地同步执行的。

任务函数绑定(bind)到原始configData。如果使用 configData = result 重新分配,这不会影响绑定(bind)函数。

任务函数应该用函数包装以便重新分配 configData:

setInterval(() => { taskA(configData) }, TASK_A_WAIT)

另一个可以与 bind 一起使用的选项是为 configData 对象保留相同的引用,这只有在初始 configData 是一个对象时才有效:

setInterval(refreshConfig.bind(null, (error, result) => {
...
Object.assign(configData, result);
}), CONFIG_REFRESH_WAIT);

如果 configData 已经有可能不会被覆盖的属性,它应该是 cleared首先。

关于javascript - .bind() 什么时候运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50728633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com