当网络错误导致重试时,我正在我的 React 应用程序中呈现通知。如果/重新建立连接(重试成功),我希望清除任何此类通知
当重试循环开始和超时时,我已经使用apollo-link-retry
并使用了自定义attempts
回调来改变缓存。这可行,但是当重试成功时通知会留在屏幕上,因为在成功重试时不会调用回调,所以我无法从缓存中清除通知。
我已经尝试使用apollo-link-error
类似的问题来实现类似的逻辑。只有在发生错误并且成功重试不是错误时才会调用该链接。
这是我的apollo-link-retry
“几乎”有效的配置:
const retryLink = new RetryLink({
attempts: (count) => {
let notifyType
let shouldRetry = true
if (count === 1) {
notifyType = 'CONNECTION_RETRY'
shouldRetry = true
} else if (count <= 30) {
shouldRetry = true
} else {
notifyType = 'CONNECTION_TIMEOUT'
shouldRetry = false
}
if (notifyType) {
client.mutate({
mutation: gql`
mutation m($notification: Notification!) {
raiseNotification(notification: $notification) @client
}
`,
variables: {
notification: { type: notifyType }
}
})
}
return shouldRetry
}
})
也许我需要实现一个自定义链接来完成这个?我希望找到一种方法来利用良好的重试逻辑,apollo-link-retry
并随着逻辑的进展另外发出一些状态来缓存。