Javascript 使用promise()ECMAScript 6异步加载文件后访问类
我是ECMAScript新手,我尝试异步加载文件并访问该类,但无法这样做 myJavascript 使用promise()ECMAScript 6异步加载文件后访问类,javascript,ecmascript-6,Javascript,Ecmascript 6,我是ECMAScript新手,我尝试异步加载文件并访问该类,但无法这样做 mymain.js具有基本类 console.log("=============in main script=================") class test{ constructor(auth_key,auth_secret){ this.auth_key = auth_key; this.auth_secret = auth_secret; con
main.js
具有基本类
console.log("=============in main script=================")
class test{
constructor(auth_key,auth_secret){
this.auth_key = auth_key;
this.auth_secret = auth_secret;
console.log("============In class test============");
}
init(){
console.log("============In init function============"+this.auth_key);
}
}
试图访问index.html中的类
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<script type="text/javascript">
function sttAsyncLoad(){
console.log("===========loading script asynchronously============");
return new Promise(function (resolve, reject) {
var s;
s = document.createElement('script');
s.src = "src/main.js";
s.onload = resolve;
s.onerror = reject;
document.head.appendChild(s);
});
}
sttAsyncLoad();
let sObj = new test("test","test11");
</script>
</body>
</html>
测试
函数sttAsyncLoad(){
console.log(“===================异步加载脚本=================”);
返回新承诺(功能(解决、拒绝){
var s;
s=document.createElement('script');
s、 src=“src/main.js”;
s、 onload=解析;
s、 onerror=拒绝;
文件。标题。附录子项;
});
}
sttAsyncLoad();
设sObj=新测试(“测试”,“测试11”);
输出获取错误未捕获引用错误:未定义测试
有人能帮我吗。在调用new test()
之前,您需要等待sttAsyncLoad
完成。既然你用的是承诺,你可以用类似
sttAsyncLoad().then(function() { let sObj = new test("test", "test11"); });
您的脚本不会等到承诺得到解决。它将运行
let sObj = new test("test","test11");
立即,无论脚本是否已加载
相反,使用承诺的then()
等待其解决:
function sttAsyncLoad(){
console.log("===========loading script asynchronously============");
return new Promise(function (resolve, reject) {
var s;
s = document.createElement('script');
s.src = "src/main.js";
s.onload = resolve;
s.onerror = reject;
document.head.appendChild(s);
});
}
sttAsyncLoad().then(function() {
let sObj = new test("test","test11");
});
请注意,并非所有浏览器都支持ES6功能。因此,您必须使用诸如TypeScript或Babel之类的编译器。。您可以在“谢谢”查看回复。