Node.js中如何将callback回调结果返回给外层getStatusWifi函数
解决方案
iwconfig.status 是异步执行的API,其回调函数的执行时机晚于外层 getStatusWifi 函数的返回时机,因此无法直接通过同步return的方式拿到回调内的status值,可选择以下两种常用方案实现需求:
方案1:沿用回调模式
给getStatusWifi新增回调参数,符合Node.js错误优先的回调约定,把结果通过回调传递给外部调用方。
var iwconfig = require("wireless-tools/iwconfig"); let api = {}; api.getStatusWifi = function (callback) { iwconfig.status(function (err, status) { // 把错误和结果都传递给回调 callback(err, status); }); }; module.exports = api;
外部调用示例:
const api = require('./你的模块文件路径'); api.getStatusWifi(function(err, status) { if (err) { // 自定义错误处理逻辑 console.error('获取Wifi状态失败:', err); return; } // 此处可正常使用status数据 console.log('Wifi状态数据:', status); });
方案2:封装为Promise(更推荐,适配async/await语法)
把异步逻辑封装为Promise实例返回,后续可以用更简洁的同步风格写法获取结果。
var iwconfig = require("wireless-tools/iwconfig"); let api = {}; api.getStatusWifi = function () { // 返回Promise实例 return new Promise((resolve, reject) => { iwconfig.status(function (err, status) { if (err) { // 错误场景走reject return reject(err); } // 成功场景走resolve返回结果 resolve(status); }); }) }; module.exports = api;
外部调用有两种常用方式:
- then链调用
const api = require('./你的模块文件路径'); api.getStatusWifi() .then(status => { console.log('Wifi状态数据:', status); }) .catch(err => { console.error('获取Wifi状态失败:', err); })
- async/await调用(语法更简洁,需要放在async函数内使用)
const api = require('./你的模块文件路径'); async function getWifiInfo() { try { const status = await api.getStatusWifi(); console.log('Wifi状态数据:', status); } catch (err) { console.error('获取Wifi状态失败:', err); } } getWifiInfo();
内容的提问来源于stack exchange,提问作者Ian Michael
相关产品推荐
相关产品推荐

