提问者:小点点

从index.html页调用异步代码[重复]


有没有人可以帮忙做以下的事情?

在主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”之后? 我想这可能是不可能的,因为暂停主浏览器线程是一件很麻烦的事?


共2个答案

匿名用户

您需要将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");
     });
}

相关问题