JavaScript 异步函数执行顺序

我有一个调用多个异步函数的函数。


$("#signUpForm").validator().on("submit", function(event) {

if (event.isDefaultPrevented()) {

    // handle the invalid form...

    sformError();

    ssubmitMSG(false, "Please fill all fields!");

} else {

    // everything looks good!

    event.preventDefault();

    

    //create use when form is submit

    ssubmitForm();

    

    //send email verification

    sendEmailVerification();


    //sign out the user

    signOut();

    

  

}

});

函数 ssubmitForm() 、 sendEmailVerification() 和 SignOut() 都声明为异步的,并且都包含 await 语句。


我收到奇怪的行为,这似乎在向我发出信号,表明这三个函数没有按照它们在代码中编写的顺序运行。我认为对于异步代码,所有其他代码都会暂停执行并等待 await 语句完成。但是从我的日志来看,我的功能似乎并非如此。这种行为只是在异步函数本身的范围内吗?三个函数的执行顺序是什么?可以在 ssubmitForm() 执行完成之前调用 sendEmailVerification() 吗?


另外,我不确定我是否使用了正确的措辞/词汇来描述我的问题。这对我来说是个大问题,因为如果我不知道词汇,我就不容易搜索我的问题。请随时纠正我对术语的任何误用。


千巷猫影
浏览 93回答 1
1回答

慕尼黑5688855

它们按照它们被调用的顺序启动,但是因为它们是异步的,所以它们可能不会按照它们被调用的顺序运行。它们立即返回并返回一个 unresolved Promise,当被调用函数完成时,它最终将异步解析(或拒绝)。您需要依次标记您的功能async和await每个调用:$("#signUpForm").validator().on("submit", async function(event) {if (event.isDefaultPrevented()) {    // handle the invalid form...    sformError();    ssubmitMSG(false, "Please fill all fields!");} else {    // everything looks good!    event.preventDefault();        //create use when form is submit    await ssubmitForm();        //send email verification    await sendEmailVerification();    //sign out the user    await signOut();      }});为了更好地理解async/ await,我建议先学习 promises。它们是让一切运转起来的基础模型;async/await只是最上面的语法糖。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript