首页 > 解决方案 > 异步函数执行顺序与常规函数执行顺序

问题描述

据我了解,异步函数将始终返回一个承诺,我只能在异步函数中使用 await。

对于我的问题,让我们以以下代码示例为例:

async function test1(data){
//do something
await FuncReturnsPromise();
await FuncReturnsPromise2();
//do something
}

和完全相同的功能但不是异步的:

function test2(data){
//do something
FuncReturnsPromise();
FuncReturnsPromise2();
//do something
}

现在在第二个函数(常规函数)中,如果我调用它,它将开始执行以及何时到达FuncReturnsPromise.

它也将开始执行它,直到它返回承诺并且它将继续(在这里我不等待承诺)到第二次调用,就是这样。

两者都FuncReturnsPromise执行FuncReturnsPromise2一些语句,而不是执行 async xhr 请求并返回承诺,这些函数中的第一个语句对我来说至关重要,需要按同步顺序执行。

所以我的问题是我是否可以像这样编写我的异步函数:

async function test1(data,wait){
//do something
if(wait)await FuncReturnsPromise();
else FuncReturnsPromise();
if(wait) await FuncReturnsPromise2();
else FuncReturnsPromise2();
//do something
} 

如果我这样调用它,该test1(somedata,false) 函数将像常规函数一样执行吗?或者我应该为我的两个用例声明异步函数和常规函数?

标签: javascript

解决方案


它仍然会返回一个 Promise,因为它是一个异步函数,但返回的 Promise 不会跟踪FuncReturnsPromise();and的解析FuncReturnsPromise2();


推荐阅读