Javascript `async/await`链中的所有函数都必须使用`async/await`关键字吗?
Javascript `async/await`链中的所有函数都必须使用`async/await`关键字吗?,javascript,async-await,Javascript,Async Await,async/await链中的所有函数都必须使用async/await关键字吗 async function one() { return await fetch(.....); } async function two() { return await one(); } async function three() { return await two(); } 我在教程中看到了一些示例,其中调用者不必使用关键字 不,至少在本例中不是这样-如果您有一个函数只是wait等待一个承
async/await
链中的所有函数都必须使用async/await
关键字吗
async function one() {
return await fetch(.....);
}
async function two() {
return await one();
}
async function three() {
return await two();
}
我在教程中看到了一些示例,其中调用者不必使用关键字 不,至少在本例中不是这样-如果您有一个函数只是
wait
等待一个承诺并返回
等待结果,那么您可以只返回该承诺,而不使用任何async
或wait
:
function one() {
return fetch(.....);
}
function two() {
return one();
}
function three() {
return two();
}
如果您希望有一个扁平的函数体,那么当该函数使用承诺并且需要在将另一个已解析的承诺返回给调用方之前执行其他操作时,您需要使用wait
。例如:
async function one() {
const fetchResult = await fetch(.....);
// do something with fetchResult
return foo;
}
function two() {
return one();
}
function three() {
return two();
}
这里,one
是wait
等待fetch
调用,然后在返回承诺之前对其进行处理,但是two
和two
不需要是async
,因为它们只是调用一个返回承诺并将该承诺返回给调用方的函数。如果two
或two
在等待后但在解析前也必须执行某些操作,则他们必须使用wait
(如果您想要一个扁平的函数体):
仅当您依赖于返回的值时。异步执行必须始终是海龟式的。如果您不关心依赖函数是否已完成,则不必等待它。此外,您不必执行
返回等待获取
,只需执行返回获取
。实际上,您的问题是“我是否需要在返回前等待
”,还是“我是否总是需要等待
一切?”。不,你的函数可以直接返回一个承诺,而不需要异步。它仍在等待。Async基本上将您的函数包装成promise(或多或少,这并不精确),而await在异步上下文中打开该promise。因此,无论您在哪里期望异步函数,您都可以传递承诺。不,函数不需要是async
就可以是wait
了。它只需要返回一个承诺。如果one
对获取结果做了一些操作,并返回了一个值(不是承诺,比如说一些JSON),那么two
在调用它时是否必须使用wait
呢?如果two
需要做一些事情而不是立即返回它,然后是-这是因为所有async
函数都返回承诺。因此,如果你在一个函数中,为了使用承诺,从中提取JSON,并将JSON解析为一个对象,你必须等待异步函数的调用。几乎所有函数都会在返回承诺之前使用承诺做些事情,所以关于你最初的问题,大多数情况下,在这种情况下,异步链中的所有内容都将等待下一个async
函数的承诺。
async function one() {
const fetchResult = await fetch(.....);
// do something with fetchResult
return foo;
}
async function two() {
const oneResult = await one();
console.log('got result for one');
return oneResult;
}
function three() {
return two();
}