本机浏览器承诺为一组查询的元素提供服务

Native browser promise for a group of queried elements

本文关键字:查询 元素 服务 一组 承诺 浏览器 本机      更新时间:2023-09-26

在查询元素/节点时,是否有方法创建承诺/履行?这不起作用,因为我在var completed = elements.every(function(el) { if (el.nodeType === 1)迭代器中得到elundefined。此外,由于未定义,promise不会拒绝。

没有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);
  }
});

正如@Arun所说,如果不使用jQuery,可能需要等待dom加载。

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>