为什么我的async异步函数返回Promise { <pending> }而非实际值?
问题原因
- 所有
async函数的返回值默认是Promise对象,你在同步代码中直接调用async函数时,函数内部的异步逻辑(await语句)还未执行完成,Promise处于未决议的pending状态,所以打印结果只能看到Promise { <pending> }。 - 你示例中最后一行
console.log("PPPP", getdata() )是同步执行的,且调用getdata时未传入参数,内部await params逻辑没有完成,自然拿不到最终返回值。 - 你在
params事件回调中调用getdata(formData)时没有加await或者通过then监听结果,也无法直接拿到返回的实际数据。
解决方案
获取async函数的返回值必须通过异步的方式,有两种常用写法:
方式1:在async作用域内使用await接收返回值
// 1. 同步位置调用需要放在立即执行async函数中 (async () => { // 记得传入正确的参数 const data = await getdata({ 'start-time': '2021-11-29 08:54:00', 'end-time': '2021-11-29 10:54:00', 'entity-type': 'lun', metric: 'throughput' }) console.log("PPPP", data) // 这里可以拿到实际返回值 })() // 2. 本身在async回调中的场景,直接加await即可 io.on("connection", async (data) => { data.on("token", (token) => { console.log(">>", token); }); data.on("params", async (params) => { let formData = await params // 加await接收返回值 const result = await getdata(formData) console.log("getdata返回结果", result) }) })
方式2:通过Promise.then()链式调用接收结果
getdata(你的参数).then(res => { console.log("PPPP", res) }).catch(err => { // 可通过catch捕获异步过程中的报错 console.error("调用出错", err) })
内容的提问来源于stack exchange,提问作者aliFront
相关产品推荐
相关产品推荐

