如何解决使此函数返回承诺时遇到问题
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;
}
例如我可以在 greetings.js 中包含 hello()、hey() 和 hi()
importFunction('hi').fromModule('greetings.js');
hi()
导入运行良好,如果我在控制台中调用导入的函数,它运行良好。 但是在导入完成之前调用了 hi(),这会导致引用错误。
我需要帮助重写函数,以便它利用 promise 确保在调用函数之前完成导入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。