当前,这是我的代码:
async function getUser(ID){
//Code for Building SQL query
return await getUserFromDb(query);
}
我刚刚安装了eslint,并且我读到在return语句中写“ await
”是没有用的,这只会减慢功能。
从返回行中删除await
后,它说我的异步函数中没有await
。
我还需要使函数异步吗?在我的主要功能中,我叫user = await getUser();
。从这里和从函数中删除等待是否正确?会不会是ansyc?
这是
async function getUser(ID){
//Code for Building SQL query
return await getUserFromDb(query);
}
async function main(){
console.log("User 1: test");
console.log("User 2: " + await getUser(424).Name);
console.log("User 3: test");
}
与这个相同吗?:
function getUser(ID){
//Code for Building SQL query
return getUserFromDb(query);
}
async function main(){
console.log("User 1: test");
console.log("User 2: " + getUser(424).Name);
console.log("User 3: test");
}
答案 0 :(得分:1)
此:
async function getUser(ID){
//Code for Building SQL query
return await getUserFromDb(query);
}
或者这个:
async function getUser(ID){
//Code for Building SQL query
return getUserFromDb(query);
}
基本上与此相同:
function getUser(ID){
//Code for Building SQL query
return getUserFromDb(query);
}
有一个小小的例外。如果getUserFromDb()
要同步抛出,那么async
版本将捕获该异常并将其转变为被拒绝的承诺。非异步版本将同步返回给调用者。
没有理由做return await someFuncThatReturnsPromise()
。您可以只执行return someFuncThatReturnsPromise()
而已,除了获得更有效的代码外,结果没有任何区别。
我还需要使函数异步吗?
可能不是。如果getUserFromDb()
的行为正确且没有同步抛出,则没有理由制作函数async
。您可以退还已经拥有的诺言。
在我的主要函数中,我称用户= await getUser();。从这里和从函数中删除等待是否正确?会不会是ansyc?
您将需要使用await getUser()
或getUser().then(...)
从getUser()
获取值。这取决于您要使用的编码样式首选项。如果使用await getUser()
,则它必须来自async
函数。如果使用getUser().then(...)
,则包含函数不必为async
。
答案 1 :(得分:0)
此:
async function getUser(ID){
//Code for Building SQL query
return await getUserFromDb(query);
}
既不需要async
也不需要await
。
由于您已经在等待getUserFromDb
,因此假定它已经返回了Promise
,如果它是带有async
标记的函数,则显式或隐式返回。
所以您可以这样做:
function getUser(ID){
//Code for Building SQL query
return getUserFromDb(query);
}
然后:
await getUser(ID)
。
答案 2 :(得分:0)
如果您的异步函数刚刚返回,则等待一个诺言,然后返回其结果,实际上与使函数同步然后返回诺言的效果相同。 仅在必须等待内部promise解析并在返回之前对结果采取行动之前,或者需要在函数内部等待多个promise时,才需要使函数异步。
async function thisDoesntMakeSense() {
return await someAsyncCall();
}
function thisDoes() {
return someAsyncCall();
}
// Later down the line you can just await this call:
const result = await thisDoes();
async function thisIsProperUseOfAsync() {
const asyncCallResult = await someAsyncCall();
return asyncCallResult + 1; //Because you operate on the result of an async call
}
async function thisAlsoMakesSense() {
const firstReslt = await firstAsyncCall();
return await secondAsyncCall(firstResult);
}
答案 3 :(得分:0)
正确的版本实际上是:
function getUser(ID){
//Code for Building SQL query
return getUserFromDb(query);
}
async function main(){
let user = await getUser(424)
console.log("User 1: test");
console.log("User 2: " + user.Name);
console.log("User 3: test");
}
因为我假设“ getUserFromDb”返回一个承诺(是异步的)。 “ getUser”功能从“ getUserFromDb”同步返回承诺,然后您异步在main中等待该承诺。