在 javascript 中,fetch api 本身并不直接提供设置默认值的参数,但可以通过 promise 链式调用或 async/await 语法结合逻辑判断来实现。具体做法是:先发起请求获取响应,若请求失败(如网络错误)或返回数据为空/无效,则使用预设的默认值替代;若请求成功且数据有效,则使用实际返回的数据。这样可以在不修改服务器端代码的情况下,确保前端应用在面对异常或空数据时仍能正常运行。

如何处理 Fetch 请求中的网络错误并返回默认值
当 Fetch 请求因网络问题、DNS 解析失败或服务端宕机而完全无法建立连接时,Promise 会进入 reject 状态。此时应在 catch 块中捕获错误并返回默认值。例如,假设我们需要获取用户列表,如果请求失败,我们希望返回一个空数组作为默认值,以避免后续代码因 undefined 而报错。

async function fetchUsersWithDefault() {
const defaultUsers = [];
try {
const response = await fetch('https://api.example.com/users');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Failed to fetch users:', error);
return defaultUsers;
}
}
上述代码中,我们定义了一个 defaultUsers 变量为空数组。在 try 块中,我们发起请求并检查响应状态。如果状态码不在 200-299 范围内,我们手动抛出错误。在 catch 块中,我们捕获任何错误(包括网络错误和手动抛出的错误),记录日志,并返回 defaultUsers。这样,无论请求是否成功,函数都会返回一个有效的数组,供后续代码使用。
如何对 Fetch 返回的有效数据进行校验并设置默认值
即使 Fetch 请求成功(即 HTTP 状态码正常),返回的数据可能不符合预期格式,例如字段缺失、类型错误或内容为 null。此时需要在解析 JSON 后对数据进行校验,若数据无效则使用默认值。例如,假设我们需要获取单个用户对象,期望其包含 id 和 name 字段,若缺少任一字段,则返回一个包含默认值的用户对象。

async function fetchUserWithValidation() {
const defaultUser = { id: -1, name: 'Unknown' };
try {
const response = await fetch('https://api.example.com/user/123');
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
// 校验数据有效性
if (!data || typeof data.id !== 'number' || typeof data.name !== 'string') {
console.warn('Invalid user data, using default');
return defaultUser;
}
return data;
} catch (error) {
console.error('Failed to fetch user:', error);
return defaultUser;
}
}
在上述代码中,我们定义了 defaultUser 对象。在成功获取数据后,我们检查 data 是否存在,以及 id 是否为数字、name 是否为字符串。如果校验失败,我们输出警告并返回 defaultUser。否则,返回原始数据。这种校验机制确保了即使服务端返回了结构不完整的数据,前端也能获得符合预期的数据结构。
基于程序中某个输入、条件或结果的具体问题
在实际开发中,有时需要根据不同的输入条件动态选择默认值。例如,当请求的用户 ID 为 0 或负数时,我们可能希望立即返回一个特定的默认用户对象,而不发起网络请求。这可以通过在发起请求前进行前置校验来实现,从而优化性能并避免不必要的网络开销。
userId
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











