我目前正在最后一章中学习“ Eloquent Javascript”第3版,但是我仍然不太了解第11章“连接” requestType代码。 (您可以在https://eloquentjavascript.net/11_async.html#c_68Z9trrpeS上看到整章内容)
使用“无处不在”方法时,每个嵌套都将具有其自己的“连接”属性,但是在开始时只有1个嵌套具有该属性,然后将其广播连接到所有附近的邻居,但是当邻居收到它时,它们不会这样做。还没有设置“连接”属性(因为目前只有源嵌套),“ requestType()”方法如何从null分配新的“连接”?
代码如下:
requestType("connections", (nest, {name, neighbors},
source) => {
let connections = nest.state.connections;
if (JSON.stringify(connections.get(name)) ==
JSON.stringify(neighbors)) return;
connections.set(name, neighbors);
broadcastConnections(nest, name, source);
});
function broadcastConnections(nest, name, exceptFor = null) {
for (let neighbor of nest.neighbors) {
if (neighbor == exceptFor) continue;
request(nest, neighbor, "connections", {
name,
neighbors: nest.state.connections.get(name)
});
}
}
everywhere(nest => {
nest.state.connections = new Map;
nest.state.connections.set(nest.name, nest.neighbors);
broadcastConnections(nest, nest.name);
});
答案 0 :(得分:0)
在幕后,BroadcastConnections()使用执行异步动作的request()。因此,由broadcastConnections()触发的任何动作都会在事件循环的下一个“滴答”中发生,这意味着到那时每个嵌套都拥有自己的Map集合。