如何在async函数的await语句后调用箭头函数及正确await自定义函数
解决async函数中await箭头函数的正确用法问题
嘿,我来帮你捋清楚这个问题!你遇到的情况核心原因很简单:你只是把箭头函数本身传给了await,而没有实际调用它——这就是为什么console.log输出的是[Function]而不是你想要的2。
先看你的原代码问题
async function func(){ const result = await ()=>{ return 2; } console.log(result); }
这里的()=>{ return 2; }是一个未被执行的函数表达式,await接收的是这个函数对象本身,而不是它执行后的返回值。await的作用是等待Promise、可等待对象或者原始值,但函数本身不属于这些范畴,所以直接返回了函数对象。
正确调用箭头函数的写法
要拿到箭头函数的返回值,你需要先调用它,再把调用结果传给await:
async function func(){ // 用括号包裹箭头函数,再加()执行它 const result = await (()=>{ return 2; })(); console.log(result); // 输出2 }
如果你的箭头函数是异步的(返回Promise),await的价值会更明显,比如:
async function func(){ const asyncArrow = () => { return new Promise(resolve => { setTimeout(() => resolve(2), 1000); }); }; const result = await asyncArrow(); console.log(result); // 1秒后输出2 }
正确用await调用自定义函数的通用方法
await的使用核心是:它要等待等待的是函数执行后的结果,而不是函数本身,具体分两种场景:
- 同步自定义函数:这类函数直接返回普通值,await不是必须的,但用了也没问题(会自动把值包装成resolved的Promise)
function syncCustomFunc() { return "同步结果"; } async function main() { const res = await syncCustomFunc(); console.log(res); // 输出"同步结果" } - 异步自定义函数:这类函数返回Promise(不管是显式返回,还是用async声明的函数),await能让你用同步写法处理异步逻辑:
// 显式返回Promise的函数 function asyncCustomFunc() { return new Promise(resolve => { setTimeout(() => resolve("异步结果"), 1500); }); } // async声明的函数(自动返回Promise) async function anotherAsyncFunc() { await new Promise(resolve => setTimeout(resolve, 500)); return "另一个异步结果"; } async function main() { const res1 = await asyncCustomFunc(); console.log(res1); // 1.5秒后输出"异步结果" const res2 = await anotherAsyncFunc(); console.log(res2); // 再等0.5秒输出"另一个异步结果" }
关键总结
- await后面必须跟可等待的值(Promise、thenable对象、原始值),如果要await函数的结果,一定要先调用函数(加
())。 - 同步函数用await只是语法糖,异步函数用await能避免回调地狱,让代码更易读。
内容的提问来源于stack exchange,提问作者trixo
相关产品推荐
相关产品推荐

