2015-12-23 2 views
0

Есть ли способ создать обещание/выполнение при запросе элементов/узлов? Это не работает, потому что я получаю elundefined в итераторе var completed = elements.every(function(el) { if (el.nodeType === 1). Кроме того, из-за неопределенного обещания не отвергается.Собственная версия браузера для группы запрашиваемых элементов

Нет JQuery, пожалуйста

var initialize = new Promise(function(resolve, reject) { 
    rippleElement = document.getElementById('ripple-element'); 
    toolbar = document.querySelector('#main-toolbar'); 
    headerName = document.getElementById('name-title'); 
    panel = document.querySelector('paper-header-panel[main]'); 
    drawer = document.querySelector('paper-drawer-panel'); 
    mainPanelContent = document.getElementById('mainPanelContent'); 

    //elements is not routing list, routing list is elementList 
    var elements = [rippleElement, toolbar, headerName, panel, 
     drawer, mainPanelContent]; 

    var completed = elements.every(function(el) { 
    if (el.nodeType === 1) { 
     return true; 
    } else { 
     return false; 
    } 
    }); 

    if (completed) { 
    resolve(); 
    } else { 
    var errMsg = 'error in querying elements'; 
    reject(errMsg); 
    } 
}); 
+2

Почему вы не добавить, если (эл! == неопределенный && el.nodeType === 1)? иначе я не понимаю ваш вопрос. – Ludo

+1

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

+0

Я искал лучший способ, чем обрабатывать 'undefined', но это работает. Я использую полимер, который не является нормальным домом. – dman

ответ

1

Как сказал @Arun, возможно, вам нужно ждать йот быть загружены, если вы не используете JQuery.

var initialize = new Promise(function(resolve, reject){ 
 

 
    function loaded(){ 
 
     
 
     var rippleElement = document.getElementById('ripple-element'), 
 
      elements = [rippleElement], 
 
      completed = _.every(elements, function(el) { 
 
       if (el && el.nodeType === 1) return true; 
 
       else return false; 
 
      }); 
 
     
 
     
 
     if (completed) resolve(); 
 
     else reject('error in querying elements'); 
 
    
 
    } 
 
    
 
    if (document.readystate === "complete"){ 
 
     window.addEventListener("load", loaded, false); 
 
    } else { 
 
     loaded(); 
 
    } 
 

 
}).then(function(){ 
 
    // ok 
 
}, function(err){ 
 
    // error 
 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script> 
 
<div id="ripple-element"></div> 
 
<div id="result"></div>