如何从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
相关产品推荐
相关产品推荐

