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

新手咨询:Async/Await调用返回Promise<Pending>的解决方法

如何正确获取异步函数返回的公网IP值

嗨,作为新手刚接触异步代码确实容易被Promise的状态搞晕,咱们一步步把这个问题理清楚~

首先先给你的GetIpAddress函数做个小优化:你里面写的return await a;其实没必要多一层await,因为a已经是await publicIp.v4()解析后的实际IP字符串了,直接return a就好,修改后的函数是这样:

const publicIp = require('public-ip');

async function GetIpAddress() {
  const ip = await publicIp.v4();
  return ip; // 返回解析完成的公网IP字符串
}

接下来解决你最关心的问题:为什么直接调用会得到Promise<Pending>,以及怎么拿到实际的IP值。

为什么会出现Promise?

异步函数(带async关键字的函数)执行后,会立刻返回一个Promise对象,这时候里面的await publicIp.v4()还在后台执行网络请求,所以Promise处于「Pending(等待中)」状态。只有当网络请求完成,Promise才会变成「Fulfilled(成功)」状态,这时候才能拿到实际的IP值。

两种正确获取IP值的方法

方法1:用async/await包裹调用(推荐,代码更直观)

因为await只能在async函数内部使用,所以你可以写一个主函数来调用GetIpAddress,或者在Node.js的模块顶层直接用await(Node.js 14.8+支持):

// 写法1:用async主函数
async function main() {
  try {
    const myIp = await GetIpAddress();
    console.log('我的公网IP是:', myIp); // 这里就能拿到实际的IP啦
  } catch (err) {
    console.error('获取IP失败了:', err); // 别忘了处理可能的错误,比如网络问题
  }
}

main(); // 执行这个主函数

// 写法2:模块顶层直接用await(Node.js 14.8+支持)
// try {
//   const myIp = await GetIpAddress();
//   console.log('我的公网IP是:', myIp);
// } catch (err) {
//   console.error('获取IP失败了:', err);
// }

方法2:用Promise的.then()方法

如果你还不太习惯async/await,也可以用Promise的.then()方法来处理成功的结果,.catch()处理错误:

GetIpAddress()
  .then(myIp => {
    console.log('我的公网IP是:', myIp);
  })
  .catch(err => {
    console.error('获取IP失败了:', err);
  });

这样两种方法都能帮你拿到实际的公网IP值,而不是Pending状态的Promise啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:37