В настоящее время я работаю над третьим выпуском 'Eloquent Javascript', который в настоящее время находится в последней главе, но я все еще не совсем понял код requestType главы 11 "соединения". (Вы можете увидеть всю главу по адресу: https://eloquentjavascript.net/11_async.html#c_68Z9trrpeS)
При использовании метода «везде» каждое гнездо будет иметь свое собственное свойство «соединения», но в начале оно есть только у 1 гнезда, затем оно транслирует соединения всем ближайшим соседям, но когда соседи получили его, они не У нас пока нет настройки свойства «connections» (потому что в данный момент она есть только в исходном гнезде), как метод requestType () назначает новые «connections» из 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);
});