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()吗?

此外,我不确定我是否使用正确的语言/词汇来描述我的问题。这对我来说是个大问题,因为如果我不认识vocab,我将很难找到我的问题。请随意纠正我对任何术语的误用。

解决方法

它们按照被调用的顺序启动,但是由于它们是异步的,因此它们可能不按照被调用的顺序运行。它们立即返回并返回未解析的Promise,当调用的函数完成时,它们最终将异步解析(或拒绝)。

您需要依次标记每个调用中的函数asyncawait

$("#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,我建议您首先了解诺言。它们是使一切都变得正常的基础模型。 async / await只是语法糖。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...