Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2016, 17:46
Интересующийся
Отправить личное сообщение для greenrow Посмотреть профиль Найти все сообщения от greenrow
 
Регистрация: 22.01.2016
Сообщений: 12

Events как альтернатива Promise
Добрый день!

Для текстового редактора делаю рекурсивный обход DOM (записываю в массив parrents и sibling).



Ниже тестовый пример.

В функции nextsibling рекурсивно делаю проход по nextsibling элементам и когда их уже нет,то возвращаю количество символов.


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

Работать с событиями в данной ситуации мне удобнее, чем через Promise.

Вопрос. Правильно ли ли так делать - использовать события для получения асинхронного значения, которые вызываются только принудительно

function testy(){
        var finallength; 



        function nextsibling(node){
           if(node){
                if (node.nodeType==1){
                    elems.rightsibling.push({node:node.nodeName,length:node.TextContent.length})
                    rightlength+=node.textContent.length;     
                }
                 else{
                     rightlength+=node.textContent.length;//длина siblings
                 }
                nextsibling(node.nextSibling)
            }else{  //когда элементов нет
                finallength=rightlength; //global var - длина символов
             var eventforsibling = new CustomEvent('eventforsibling');//новое событие
                document.body.dispatchEvent(eventforsibling) //вызов
            } 
        }
        
    function parentnodes(node,stopnode){
      // Listen for the event.
            document.body.addEventListener('eventforsibling', function () {      alert( finallength) });

        }
        parentnodes(node,stopnode);

}
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2016, 23:07
Аспирант
Отправить личное сообщение для fuckingquest Посмотреть профиль Найти все сообщения от fuckingquest
 
Регистрация: 28.10.2016
Сообщений: 70

А при чем тут промисы?
Ты реализовал что-то типа паттерна Observer с нативным сахарком. У тебя просто body слушает событие.
Механизмы то там в любом случае схожие чем то, внутри движка коллбеки, записанные в промисы дергаются на события, но у них назначение другое -- писать асинхронный код последовательно.

В твоем случае где гарантия последовательного выполнения кода?
Вызываешь ты свой testy, допустим, через рандомные промежутки времени трижды, и должна быть какая-то последовательность, чтобы они друг друга не перекрывали во времени, где у тебя это?
В таком случае, нужно будет вручную синхронизировать это все в коллбеке eventforsibling, очередь создавать и тп.
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2016, 23:29
Аспирант
Отправить личное сообщение для fuckingquest Посмотреть профиль Найти все сообщения от fuckingquest
 
Регистрация: 28.10.2016
Сообщений: 70

Да и вообще, у тебя фигня какая то. Код твой синхронен. Ты бы мог вместо этого
var eventforsibling = new CustomEvent('eventforsibling');//новое событие
 document.body.dispatchEvent(eventforsibling) //вызов

просто вызывать alert( finallength), и было бы то же самое. Ты написал синхронный код через асинхронную жопу. Смысл то какой в этом?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создается function Function(){} ? Cepairda Общие вопросы Javascript 0 10.02.2016 15:03
переманную как условие в if блок xas Общие вопросы Javascript 3 02.02.2016 21:17
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30
Promise как сделать синхронным? FireVolkhov Angular.js 3 07.04.2015 16:36