code: function refreshReaderClients(channelState) {
      return getReadersUuids(channelState.channelName, channelState.paths)
          .then(otherReaders => {
              // remove subscriptions to closed readers
              Object.keys(channelState.otherReaderClients)
                  .filter(readerUuid => !otherReaders.includes(readerUuid))
                  .forEach(async (readerUuid) => {
                      try {
                          await channelState.otherReaderClients[readerUuid].destroy();
                      } catch (err) {}
                      delete channelState.otherReaderClients[readerUuid];
                  });
  
              // add new readers
              return Promise.all(
                  otherReaders
                  .filter(readerUuid => readerUuid !== channelState.uuid) // not own
                  .filter(readerUuid => !channelState.otherReaderClients[readerUuid]) // not already has client
                  .map(async (readerUuid) => {
                      try {
                          if (channelState.closed) return;
                          try {
                              const client = await openClientConnection(channelState.channelName, readerUuid);
                              channelState.otherReaderClients[readerUuid] = client;
                          } catch (err) {
                              // this can throw when the cleanup of another channel was interrupted
                              // or the socket-file does not exits yet
                          }
                      } catch (err) {
                          // this might throw if the other channel is closed at the same time when this one is running refresh
                          // so we do not throw an error
                      }
                  })
              );
          });
  }
docs: ensures that the channelState is connected with all other readers
  @return {Promise<void>}