有没有人可以帮忙做以下的事情?
在主html页面中,我使用DOM的onLoad方法,如下所示:
<body onLoad="OnLoad()">
我的OnLoad方法是:
function OnLoad()
{
var thing = new Thing();
thing.GetAsync();
alert("T");
}
东西在哪里:
function Thing()
{
}
Thing.prototype.GetAsync = async function ()
{
var result = await this.AsyncFunc();
alert(result);
}
Thing.prototype.AsyncFunc = async function ()
{
return new Promise(resolve => {
setTimeout(() => {
resolve("Text");
}, 2000);
});
}
当我运行这个时,我立即看到“t”,2秒后我看到“text”。
有没有可能等待thing.getAsync()的结果,以便在OnLoad方法中“t”总是在“text”之后? 我想这可能是不可能的,因为暂停主浏览器线程是一件很麻烦的事?
您需要将onLoad定义为一个异步函数,然后等待thing.getAsync();
async function OnLoad()
{
var thing = new Thing();
await thing.GetAsync();
alert("T");
}
您可以在async调用后添加.then
,以便在Promise完成时等待。 这不会阻止浏览器线程。 因为异步调用的目的是使体验平滑,而不是阻塞UI。
function OnLoad()
{
var thing = new Thing();
thing.GetAsync().then(function(result) {
alert("T");
});
}