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

如何从http.get函数返回值?解决返回值始终为undefined问题

问题根源
  • get_public_ip函数本身没有返回任何值,默认返回undefined,而await只能等待Promise对象,原函数没返回Promise,自然拿不到结果。
  • 你在resp.on('data')回调里写的return ip.toString(),只是这个回调函数的返回值,和外层的get_public_ip半毛钱关系都没有,根本传不出IP地址。
修复代码

把get_public_ip改成返回Promise,在数据接收完成后用resolve传递结果,同时加上错误处理:

const http = require('http'); // 别忘了引入http模块

function get_public_ip() {
    return new Promise((resolve, reject) => {
        http.get({
            host: 'api.ipify.org',
            port: 80,
            path: '/'
        }, (resp) => {
            let fullIp = '';
            // 拼接分块返回的数据
            resp.on('data', (chunk) => {
                fullIp += chunk.toString();
            });
            // 数据接收完毕,返回结果
            resp.on('end', () => {
                resolve(fullIp);
            });
            // 处理响应错误
            resp.on('error', (err) => {
                reject(err);
            });
        }).on('error', (err) => {
            // 处理请求错误
            reject(err);
        });
    });
}

async function run() {
    try {
        const pubip = await get_public_ip();
        console.log('公网IP:', pubip);
        // 这里正常使用pubip即可
    } catch (err) {
        console.error('获取IP失败:', err);
    }
}

run();
额外提醒
  • 原代码只监听了data事件,但HTTP响应可能分多次返回数据,必须等end事件触发时,拼接好的fullIp才是完整的IP地址。
  • 加上错误处理能避免请求失败时程序直接崩溃,让逻辑更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:30:57