雄辩的Javascript第11章(第3版)自相矛盾?

时间:2018-07-01 07:24:21

标签: javascript asynchronous crow

我目前正在最后一章中学习“ 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);
});

1 个答案:

答案 0 :(得分:0)

在幕后,BroadcastConnections()使用执行异步动作的request()。因此,由broadcastConnections()触发的任何动作都会在事件循环的下一个“滴答”中发生,这意味着到那时每个嵌套都拥有自己的Map集合。