You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除async函数返回数组外层的Promise,直接获取目标数组

问题原因

所有声明为async的函数,无论你return的是什么类型的值,最终返回值都会自动被包装为Promise对象。你直接将getUsers()的返回值赋值给users变量,拿到的自然就是Promise实例,而不是内部的返回数据。

解决方法

有两种常用方式可以拿到Promise内部的数组数据:

方法1:在async作用域内使用await获取结果

await只能在async标记的函数内部使用,你可以用自执行匿名async函数来包裹调用逻辑,示例代码:

async function getUsers(query){
    try{
        const results = await client.query(query);
        const data = results.rows;
        console.log("data",data)
        return  data;
    } catch(err) {
        console.log(err.stack);
    }finally{
        client.end();
    }
}

// 用自执行async函数包裹调用逻辑
(async () => {
  const users = await getUsers(`Select * from users;`);
  // 这里就能直接拿到数组,打印正常结果
  console.log(users);
  // 后续要使用users的逻辑都要写在这个作用域内部
})()

方法2:使用.then()回调获取结果

Promise实例自带.then()方法,内部回调会在Promise状态变为fulfilled的时候触发,参数就是Promise内部返回的数据:

getUsers(`Select * from users;`).then(users => {
  // 回调内部可以拿到正常的数组数据
  console.log(users);
  // 后续使用users的逻辑都要写在这个回调内部
})
注意事项

你当前的getUsers函数的finally逻辑里直接调用了client.end(),会在第一次调用getUsers执行结束后就关闭数据库连接,如果后续还要调用这个方法查询数据会报错。如果有多次查询需求,建议把数据库连接关闭的逻辑移到所有查询都执行完成的位置,而不是写在getUsers内部。

内容的提问来源于stack exchange,提问作者KurragömmicPark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:24:02