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

Node.js中使用async/await能否返回多个值?

在Node.js中用async/await返回多个值的实现方法

当然可以实现啦!不过得先理清楚一个核心细节:async函数本质上是返回一个Promise,而Promise只能resolve单个值——但这完全不影响我们返回多份数据,只需要把这些值打包成数组或者对象就行,和你用回调函数时的思路其实是相通的。

先回顾下你熟悉的回调函数写法

比如你可能会这样在回调里返回多个值:

// 回调风格的多值返回
function fetchMultiData(callback) {
  setTimeout(() => {
    // 回调里传递多个参数
    callback(null, '用户信息', '订单列表', 2024);
  }, 1000);
}

// 调用时接收多个参数
fetchMultiData((err, userInfo, orderList, year) => {
  if (!err) {
    console.log(userInfo, orderList, year);
  }
});

对应async/await的写法

因为async函数的return值会被自动包装成Promise.resolve(返回值),我们只需要把多个值放进数组或对象里返回,再用解构赋值接收就好:

方案1:用数组包装多值(适合顺序明确的场景)

// async函数返回包含多值的数组
async function fetchMultiData() {
  // 模拟异步操作(比如数据库查询、API请求)
  await new Promise(resolve => setTimeout(resolve, 1000));
  // 把多个值打包成数组返回
  return ['用户信息', '订单列表', 2024];
}

// 调用时用数组解构接收
async function main() {
  const [userInfo, orderList, year] = await fetchMultiData();
  console.log(userInfo, orderList, year); // 输出:用户信息 订单列表 2024
}

main();

方案2:用对象包装多值(适合需要明确标识每个值含义的场景)

这种方式可读性更强,尤其当值的数量较多时:

// async函数返回包含多值的对象
async function fetchMultiData() {
  await new Promise(resolve => setTimeout(resolve, 1000));
  // 返回带键名的对象
  return {
    userInfo: '用户信息',
    orderList: '订单列表',
    currentYear: 2024
  };
}

// 调用时用对象解构接收
async function main() {
  const { userInfo, orderList, currentYear } = await fetchMultiData();
  console.log(userInfo, orderList, currentYear); // 输出:用户信息 订单列表 2024
}

main();

补充说明

为什么不能直接像回调那样返回多个值?因为Promise的resolve方法只接受一个参数,async函数的return值会被自动传入resolve,所以直接写return val1, val2是无效的(JS里逗号运算符只会返回最后一个值)。而用数组或对象包装,本质上还是返回单个值(数组/对象本身),但里面可以包含任意多的子数据,完美解决了“返回多个值”的需求。

内容的提问来源于stack exchange,提问作者Aditya Mertia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:22:53