跳到主要内容

isNetworkError()

function isNetworkError(error): boolean;

Defined in: packages/rxdb/src/repository/network-error.ts:85

判断一个错误是否为网络故障(连不上远端),而非远端给出的业务结果。

Parameters​

ParameterTypeDescription
errorunknown捕获到的任意值

Returns​

boolean

仅在能明确识别为网络故障时为 true

Remarks​

默认方向是「不是」:认不出的错误一律返回 false,由调用方原样上抛。 反过来会更危险 —— 401、唯一键冲突、字段校验失败被当成离线,调用方拿到的是陈旧缓存 而不是失败原因,问题被推迟到不知道多久以后才暴露。

判据优先级:

  1. NetworkOfflineError —— 已经分类过了
  2. 带数字 status → 不是网络错误。拿到了 HTTP 状态码就说明连接是通的, 502 / 503 也是远端给的回答,不是网线断了
  3. Node errno(NETWORK_ERRNO)
  4. DOMException.name(NETWORK_ERROR_NAMES)
  5. fetch() 失败特有的 TypeError 消息

Example​

try {
await remote.fetchMetadata('Todo', where);
} catch (error) {
if (!isNetworkError(error)) throw error; // 业务错误原样上抛
return readLocalCache();
}