Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   синхронно выполнить код (https://javascript.ru/forum/events/74645-sinkhronno-vypolnit-kod.html)

денис77447327 26.07.2018 13:52

синхронно выполнить код
 
var q = document.getElementsByClassName('message__content');
var inputmessage = document.getElementsByClassName('messenger-tools__input');
var sendmessage = document.getElementsByClassName('messenger-tools__btn js-send-message');
var selectuser = document.getElementsByClassName('b-link im_user');

        if (((q[q.length - 1].parentNode.className).indexOf('message--in') > -1) && q.length < 10) {
            for (var i = 0; i < q.length; i++) {
                if (q[i].innerText={{данные из внешнего ресурса}}) {
                    inputmessage[0].innerText = {{данные из внешнего ресурса}}
                }
				
                
            }
        }
    
    sendmessage[0].click();

использую платформу в которую можно внедрять жабаскрипт
проблема в том что цикл фор выполняется быстро и нужные {{данные из внешнего ресурса}} не успевают подтянутся. нужно выполнить сихнронно

Nexus 26.07.2018 14:09

Ну так подождите пока данные подгрузятся и после выполняйте скрипт.

В строке 8, вероятно, ошибка: производится присвоение значения переменной, не проверка.

денис77447327 26.07.2018 14:17

если тут promise то как его вставить?

денис77447327 26.07.2018 14:18

[quote=Nexus;491070]Ну так подождите пока данные подгрузятся и после выполняйте скрипт.
если тут promise то как его вставить?

Nexus 26.07.2018 14:23

денис77447327, смотря как подгружаются внешние данные.

SuperZen 26.07.2018 14:44

<script>
  asyncLoop = async () => {
    for (var i = 0; i < 10; i++) {
      var formData = new FormData()
      formData.append('id', i)
      var r = await fetch('./data.php', { method: 'post', body: formData })
      var t = await r.text() ;//.json()
      console.log(t)
    }
  }
  asyncLoop()
</script>


Можно и Promise.all()

<script>
    asyncPromiseAll = async () => {
      requests = []
      for (var i = 0; i < 3; i++) {
        var formData = new FormData()
        formData.append('id', i)
        requests.push(fetch('./data.php', { method: 'post', body: formData }).then(r => r.text()))
      }
      let obj = await Promise.all(requests)
      console.log(obj)
    }

    asyncPromiseAll()
  </script>


а вообще это неправильно :)

можно также в цикле вызывать fetch('url').then(r => r.json).then(r => {
//и здесь апдейтить
...
inputmessage[0].innerText = r
})

денис77447327 26.07.2018 14:55

классный ответ но я ничего не понял

денис77447327 26.07.2018 14:56

Цитата:

Сообщение от Nexus (Сообщение 491074)
денис77447327, смотря как подгружаются внешние данные.

берутся из специального поля ресурска который написан на c++ но си плюс не так быстр как жаба скрипт видимо)

Nexus 26.07.2018 15:39

денис77447327, к js эти данные как попадают?
Асинхронным запросом самим js или подключением скрипта через тег script?

денис77447327 26.07.2018 16:12

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


Часовой пояс GMT +3, время: 12:53.