代码之家  ›  专栏  ›  技术社区  ›  shmnff

如何传递解析值

  •  0
  • shmnff  · 技术社区  · 7 年前

    这个怎么了 Promise 使用?

    const count_elems = function(c){
      const elems = c.getElementsByTagName('p');
      console.log(elems.length);
    };
    
    const handler = function(){
        return new Promise(function (resolve, reject) {
         const cont = document.getElementById('cont');
         const p = document.createElement('p');
         for (let i=100000; i--;){
            cont.appendChild(p.cloneNode());
         }
         return resolve(cont);
      })
    }
    
    const test = function(){
      handler()
        .then(count_elems(c))
        .catch(function(e){console.log(e)});
    };
    
    document.getElementById('but')
      .addEventListener('click', test);
     <div id="cont"></div>
      <button id="but">click me</button>
    2 回复  |  直到 7 年前
        1
  •  2
  •   Suren Srapyan    7 年前

    获取 c then 函数,然后传递到 count_elems 作用同时拆下 return resolve ,你不需要。

    .then(c => count_elems(c)) 或者只是 .then(count_elems) 没有函数调用。

    const count_elems = function(c){
       const elems = c.getElementsByTagName('p');
       console.log(elems.length);
    };
    
    const handler = function() {
    
       return new Promise(function (resolve, reject) {
          const cont = document.getElementById('cont');
          const p = document.createElement('p');
          
          for (let i=100000; i--;){
             cont.appendChild(p.cloneNode());
          }
         
          resolve(cont);
      });
      
    }
    
    const test = function() {
       handler().then(c => count_elems(c))
                .catch(e => console.log(e));
    };
    
    document.getElementById('but')
            .addEventListener('click', test);
    <div id="cont"></div>
    <button id="but">click me</button>
        2
  •  1
  •   Ultimater    7 年前

    .then(count_elems(c)) 应该是 .then(count_elems)