微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使此函数返回承诺时遇到问题

如何解决使此函数返回承诺时遇到问题

function importFunction(func){
   this.fromModule = function(url){
    if(func == '*'){
      importJS(url);
    }
    var funcs = func.split(',');
    var scriptBuilder = '';
    
      var xhr = new XMLHttpRequest();
      xhr.onload = function() {
        if (this.status == 200) {
          var script = this.response;
          var script = script.split('\n');
          
          var searching = 0;
          var stopedAt = 0;
          var line = 0;
          var stop = false;
          var bracket1 = 0;
          var bracket2 = 0;
          
          for(i=0;i<funcs.length;i++){
            var word = funcs[searching];
            //console.log('searching for '+word)
            for(j=0;j<script.length;j++){
              stop = false;
              bracket1 = 0;
              bracket2 = 0;
              codeInline = script[j];
              //console.log()
              if(codeInline.includes('function ' + word + '(') || codeInline.includes(word + ' = (')){
                //Add webroid comment
                scriptBuilder += '\n //' + word + ' imported with WebroidJS \n \n';
                while(!stop){
                  codeInline = script[j];
                  
                  if (codeInline.includes('}') && codeInline.includes('{') && !codeInline.startsWith('//')) {
                    bracket1++;
                    bracket2++;
                  }else if(codeInline.endsWith('{') && !codeInline.startsWith('//')){
                    bracket1++;
                    //console.log(codeInline)
                  }else if(codeInline.includes('}') && !codeInline.endsWith(';') && !codeInline.startsWith ('//')){
                    bracket2++;
                    //console.log(codeInline)
                  }
                  
                  if(bracket1 == bracket2 && (bracket1+bracket2)%2 == 0){
                    stop = true;
                  }
                  
                  //console.log(bracket1,bracket2)
                  
                  scriptBuilder += (codeInline + '\n');
                  j++;
                }
                stopedAt = j+1;
                //console.log(codeInline)
              }
            }
            searching++;
          }
          var importedJS = document.createElement('script');
          importedJS.setAttribute('src','data:application/javascript;base64,' + btoa(scriptBuilder))
          document.body.appendChild(importedJS);
          //alert(scriptBuilder);
          this.dispatchEvent(evnt);
        } else {
          //handle error
        }
        return this;
      }
      xhr.open('GET',url,true);
      xhr.send();
      return this;
  }
  return this;
}

我上面有这个函数,它从 js 文件中导入其他函数

例如我可以在 greetings.js 中包含 hello()、hey() 和 hi()

我可以使用此函数导入任何或所有函数,例如

importFunction('hi').fromModule('greetings.js');

hi()

导入运行良好,如果我在控制台中调用导入的函数,它运行良好。 但是在导入完成之前调用了 hi(),这会导致引用错误

我需要帮助重写函数,以便它利用 promise 确保在调用函数之前完成导入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。