Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Является ли JavaScript в DOM асинхронным или синхронным кодом?

Автор вопроса: RiverOceanSeaОтветов: 2

Первоначальный вопрос звучал так: "Ванильные запросы DOM javaScript. Как убедиться, что асинхронный код завершился во внешнем интерфейсе, прежде чем продолжить?"

но я изменил заголовок, чтобы он был полезнее для поисковых запросов и показывал, какая информация на самом деле содержится в ответе.

Вы заметите, что, основываясь на предоставленном коде, я думал, что манипуляции с DOM были асинхронными. В ответах указывалось, что это не так.


Если такой код является асинхронным:

let elements = document.querySelectorAll('div');

Тогда как убедиться, что все элементы 'div' были сохранены в переменной 'elements', прежде чем зацикливаться на них?

let elements = document.querySelectorAll('div');
//how do you know that all of the elements will
//have been retrieved in time to run this for loop:
for(let i = 0 ; i < elements.length ; i++) {
    let div = elements[i];    console.log(div);
}
  • Это не асинхронно. Andrew Li 09.02.2018
  • Это не асинхронно, так что нет проблем. Вы имеете в виду, что элементы еще не загружены? 09.02.2018
  • не вижу здесь проблемы... пожалуйста, прочитайте справку по js, прежде чем обращаться сюда за помощью. querySelectorAll не является асинхронным... Pierre 09.02.2018
  • @Pierre, в какой-то документации конкретно указано, является ли querySelectorAll асинхронным или нет? У вас есть ссылка? Andrew Lohr 09.02.2018
  • @AndrewLohr: синхронность является нормой для методов JS. Асинхронные методы странные, поэтому они документируются как таковые. 09.02.2018
  • @Maiya - каждый раз, когда вы взаимодействуете с DOM, это асинхронная операция - это не так. Иногда, когда я запускаю такой код - если у вас есть код, в котором есть проблема, предоставьте минимальный воспроизводимый пример, который на самом деле демонстрирует это, не гадайте о причине проблемы, а затем создайте тестовый пример, который этого не демонстрирует. Quentin 09.02.2018

javascriptasynchronousdomsynchronous

Ответы

Ответ 1 · рейтинг 3 · Community

Если такой код асинхронный

Это не querySelectorAll не асинхронная функция.

как вы убедитесь, что все элементы "div" были сохранены в переменной

Ничего не делать.

Единственная причина, по которой вам может понадобиться подождать, - это если предыдущая функция асинхронно добавляла содержимое в DOM, и в этом случае вам пришлось бы ждать завершения этой функции.

Ответ 2 · рейтинг 2 · RiverOceanSea

Я думаю, что хорошие учителя замечают, в чем заключается недоразумение, и разъясняют его, а не рефлекторно занижают вопросы уровня новичка.

Ранее я думал, что, поскольку DOM представляет собой отдельный интерфейс (т.е. vanilla js взаимодействует с браузером), чтение и запись в него аналогичны чтению и записи в базу данных; и ошибки в моем коде, казалось, вписывались в эту парадигму.

На самом деле сценарии JS выполняются в той же среде, что и DOM, поэтому они не асинхронны. Асинхронные события - это события, которые обычно отправляются в другую среду, а затем возвращаются, выстраиваясь в цикле событий.

Легко понять определение асинхронного события?

https://eloquentjavascript.net/11_async.html

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы