Сокет.ввод-вывод с require.js асинхронность и ввод-вывод не определены

#javascript #node.js #socket.io #requirejs #socket.io-1.0

#javascript #node.js #socket.io #требуется js #socket.io-1.0

Вопрос:

Может кто-нибудь объяснить мне, почему это работает:

  <script src="//cdn.socket.io/socket.io-1.0.4.js"></script>
 <script>
        var socket = io('http://nodeapp.herokuapp.com');
        console.log(socket);
 </script>
  

но это не работает:

  <script async src="//cdn.socket.io/socket.io-1.0.4.js"></script>
 <script>
        var socket = io('http://nodeapp.herokuapp.com');
        console.log(socket);
 </script>
  

Ошибка:

      Uncaught ReferenceError: io is not defined 
  

Или как я могу добавить сокет.библиотека ввода-вывода на стороне клиента с require.js и это в данном случае работает нормально (без ошибок выше).

Ответ №1:

 <script async ...
  

Вы явно просите браузер не ждать, пока он не получит скрипты.

Таким образом, он не ждет, пока скрипт будет извлечен и выполнен, прежде чем перейти к следующему сценарию. И, следовательно io , еще не определен, когда вы переходите к

 var socket = io('http://nodeapp.herokuapp.com');
  

MDN в асинхронном скрипте

Комментарии:

1. Если я позже в консоли попытаюсь подключиться, ошибка все еще существует.

2. Реальный вопрос в том, почему socket.io (1.0.x) загружается с require.js не доступен по всему миру? С версией 0.9 все работает нормально…