为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 异步函数执行顺序

JavaScript 异步函数执行顺序

千巷猫影 2022-12-29 13:50:36
我有一个调用多个异步函数的函数。$("#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() 吗?另外,我不确定我是否使用了正确的措辞/词汇来描述我的问题。这对我来说是个大问题,因为如果我不知道词汇,我就不容易搜索我的问题。请随时纠正我对术语的任何误用。
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

它们按照它们被调用的顺序启动,但是因为它们是异步的,所以它们可能不会按照它们被调用的顺序运行。它们立即返回并返回一个 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只是最上面的语法糖。


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信