JavaScript中async函数调用为何返回Promise而非response.data?
问题原因
所有被async关键字声明的函数,返回值默认会被JavaScript自动包装为Promise对象,这是语法层面的固定规则,和你内部有没有写await、有没有返回异步请求结果无关。
你直接执行console.log(trigger())时,trigger内部的axios请求还处于未完成的状态,自然拿不到最终的response.data,只会打印出处于pending状态的Promise实例。
解决方案
要拿到异步返回的结果,只能通过以下两种方式调用:
- 使用
.then链式调用获取结果
trigger().then(resData => { // 只有这个回调里才能拿到接口返回的response.data console.log(resData) })
- 在其他async函数中通过
await调用获取结果
如果是顶层作用域,可以直接用立即执行的异步函数包裹:
(async () => { const resData = await trigger() console.log(resData) })()
额外注意
你当前的trigger函数没有兜底逻辑,如果遍历完所有data的条目都没有匹配value.name == source的项,函数没有主动返回值,最终Promise的兑现值会是undefined,建议补充匹配失败的兜底处理,避免后续逻辑报错。
内容的提问来源于stack exchange,提问作者user3368526
相关产品推荐
相关产品推荐

