JS - есть ли NodeList.forEach asyc на моем сайте? - PullRequest
0 голосов
/ 19 ноября 2018

Я пишу несколько JS для своей веб-страницы.

Я запросил список div, используя document.querySelectorAll, а затем NodeList.forEach (https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach)

Однако я бы хотелзнаете, будет ли мой код выполняться последовательно - а именно, обратный вызов в моем NodeList.forEach помещает некоторые элементы в массив.

Могу ли я быть уверен, что следующий шаг произойдет только после того, как forEach итерирует через каждый элемент?

  //Get all the selected tags
  selectedTags = document.querySelectorAll('[class*=lpSelectedTag]');
  selectedTagsArray = [];

  //Get the values attribute
  selectedTags.forEach(function(currentValue) { 
    selectedTagsArray.push(currentValue.attributes.value.value); 
  });

  //Then create some fancy string using selectedTagsArray

Итак, в последний момент, когда я создаю свою «причудливую строку», будет ли эта строка всегда появляться после forEach?

Спасибо.

1 Ответ

0 голосов
/ 19 ноября 2018

Могу ли я быть уверен, что следующий шаг произойдет только после того, как forEach прошел через каждый элемент?

Да. NodeList#forEach - синхронная операция.


Примечание: вы можете использовать Array.prototype.map:

selectedTagsArray = Array.prototype.map.call(selectedTags, function(currentValue) { 
    return currentValue.attributes.value.value; 
});

или в ES2015 +:

selectedTagsArray = Array.from(selectedTags).map(function(currentValue) { 
    return currentValue.attributes.value.value; 
});

или

selectedTagsArray = [...selectedTags].map(function(currentValue) { 
    return currentValue.attributes.value.value; 
});

Примечание 2: Если вам нужно текущее значение для input, это не атрибут; вместо этого используйте свойство value: currentValue.value, а не currentValue.attributes.value.value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...