Javascript 使用promise()ECMAScript 6异步加载文件后访问类

Javascript 使用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

我是ECMAScript新手,我尝试异步加载文件并访问该类,但无法这样做

my
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之类的编译器。。您可以在“谢谢”查看回复。