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

如何在Node.js的async函数外部获取Promise返回值?

解决异步函数外部获取返回值为undefined的问题

我来帮你把这个问题捋清楚!你遇到的情况其实是异步代码执行顺序的典型问题,咱们一步步来拆解:

为什么你的代码里subscription会是undefined?

getSub()是一个异步函数,当你调用它的时候,JavaScript并不会停下来等它里面的await stripe.subscriptions.retrieve执行完成,而是会继续往下跑console.log这行代码。这时候异步请求还在后台处理,subscription变量还没被赋值,自然就是初始的undefined啦。

正确的写法有这几种:

1. 用await调用异步函数(需包裹在异步环境中)

因为await只能在异步函数里使用,所以我们可以用立即执行函数表达式(IIFE)来创建一个异步环境:

let subscription;
async function getSub(){
  return await stripe.subscriptions.retrieve('sub_HurxwcQoCIH7jv');
}

// 用IIFE包裹异步逻辑
(async () => {
  subscription = await getSub();
  console.log("subscription: ", subscription); // 这里就能拿到正确的值了
})();

2. 用.then()处理Promise返回值

异步函数本身会返回一个Promise,所以我们可以直接用.then()来接收异步操作完成后的结果:

let subscription;
async function getSub(){
  return await stripe.subscriptions.retrieve('sub_HurxwcQoCIH7jv');
}

getSub().then(sub => {
  subscription = sub;
  console.log("subscription: ", subscription);
});

3. 简化getSub函数

其实async函数里如果直接返回一个Promise,await可以省略,因为async函数会自动把返回值包装成Promise:

let subscription;
// 简化后的getSub
function getSub(){
  return stripe.subscriptions.retrieve('sub_HurxwcQoCIH7jv');
}

// 同样用IIFE或者.then()处理
(async () => {
  subscription = await getSub();
  console.log("subscription: ", subscription);
})();

核心记住一句话:异步操作的结果只能在异步操作完成后才能访问,不能在调用异步函数后立即同步去获取结果哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:42:34