如何正确实现基于request库的fetchDataForUser异步回调函数?
实现fetchDataForUser函数的方案
以下是基于request库的完整实现,包含完整的错误处理和数据提取逻辑:
const request = require('request'); const fetchDataForUser = function(url, username, callback) { request.get(url, (error, response, body) => { // 处理网络请求错误 if (error) { return callback(error, null); } // 校验HTTP响应状态 if (response.statusCode !== 200) { return callback(new Error(`请求失败,状态码:${response.statusCode}`), null); } // 解析JSON响应体,处理解析失败情况 let parsedData; try { parsedData = JSON.parse(body); } catch (parseErr) { return callback(new Error(`JSON解析错误:${parseErr.message}`), null); } // 查找目标用户的数据 const targetUser = parsedData.find(user => user.username === username); if (!targetUser) { return callback(new Error(`未找到用户 "${username}" 的数据`), null); } // 提取胜负数据(根据实际API返回结构调整字段) const userStats = { wins: targetUser.wins, losses: targetUser.losses, draws: targetUser.draws || 0 // 可选:处理可能缺失的字段 }; // 成功返回结果 callback(null, userStats); }); };
关键说明
- 错误分层处理:覆盖了网络故障、HTTP请求失败、JSON解析错误、用户不存在四种常见错误场景,确保每个错误都能通过回调传递给调用方
- 异步逻辑适配:完全遵循request库的回调式异步模式,符合题目要求的异步函数设计
- 数据兼容性:假设API返回的是包含用户对象的数组,每个用户对象包含
username、wins、losses等字段;如果实际API结构不同,只需调整find的匹配条件和userStats的字段提取逻辑即可 - 边界情况处理:对可能缺失的字段(如
draws)设置默认值,避免返回undefined
内容的提问来源于stack exchange,提问作者questionMan
相关产品推荐
相关产品推荐

