NetworkManager
NetworkManager 负责编排异步 fetch。通过跟踪所有进行中的请求,它能够对使用 throttle 标志发起的相同请求进行去重。
实现
NetworkManager 实现了 Manager
生命周期
成功
错误
成员
constructor({ dataExpiryLength = 60000, errorExpiryLength = 1000 })
参数表示资源被视为“过时”之前的默认时间(以毫秒为单位)。
middleware
消费的 action
会发起网络请求,并在完成后 dispatch。
处理的 action
派发的 action
allSettled(): Promise
在所有进行中的 fetch 完成后 resolve。概念上类似于 Promise.allSettled
skipLogging(action)
供 DevtoolsManager 判断是否记录某个 action
默认:
skipLogging(action: ActionTypes) {
return action.type === FETCH && action.meta.key in this.fetched;
}
受保护成员
handleFetch(fetchAction)
当 middleware 拦截到 'rdc/fetch' action 时调用。
随后会为某个 key 创建一个 promise,并可能发起网络 fetch。
仅当 action meta 指示时才使用 throttle。这对于确保变更请求始终会被发出非常有价值。
handleSet(setAction)
当 middleware 拦截到 set action 时调用。
会 resolve 与该 set key 关联的 promise。
throttle(key, fetch)
确保任意时刻对于给定 key 只有一个请求在进行中
使用 key 获取进行中的 promise;如果不存在,则创建一个新的 promise 并调用 fetch。
getLastReset(): number
整个 store 上次被重置的时间戳
clear(key)
清除给定 key 的 promise 状态
clearAll()
通过 reject 剩余的 promise 来确保所有 promise 都已完成