我正在使用 react-query 进行 API 调用,在这个问题案例中,我只想在满足某些条件时调用 API。
我有一个输入框,用户可以在其中输入搜索查询。当输入值更改时,将使用输入的内容作为搜索查询调用搜索服务器……但前提是输入值的长度超过 3 个字符。
在我的反应组件中,我正在调用:
const {data, isLoading} = useQuery(['search', searchString], getSearchResults);
Run Code Online (Sandbox Code Playgroud)
我的getSearchResults函数将有条件地进行 API 调用。
const getSearchResults = async (_, searchString) => {
if (searchString.length < 3)
return {data: []}
const {data} = await axios.get(`/search?q=${searchString}`)
return data;
}
Run Code Online (Sandbox Code Playgroud)
我们不能在条件中使用钩子 - 所以我将条件放入我的 API 调用函数中。
这几乎有效。如果我输入一个简短的查询字符串,则不会发出 API 请求,并且会返回一个空数组data。好极了!
但是 -isLoading会true短暂地翻转- 即使没有发出 HTTP 请求。所以我的加载指示器会在没有实际网络活动时显示。
我是否误解了如何最好地解决我的用例,有没有办法确保isLoading在没有 HTTP 活动的情况下返回 false?
我有一个警报跟踪单个 ALB 的 LoadBalancer 5xx 错误指标。如果过去 1 中的 1 个数据点高于阈值 2,则应处于“警报”状态。周期设置为 1 分钟。查看报警详情:
世界标准时间 2020 年 9 月 23 日 17:18,负载均衡器开始返回 502 错误。这显示在下面的 Cloudwatch 指标图表中,并且我已确认时间是正确的(这是强制 502 响应,因此我知道何时触发它,并且可以在 ALB 日志中看到 17:18 时间戳)
但在警报日志中,“警报中”状态仅在 17:22 UTC 触发,即 17:18 期间出现超过 2 个错误的 4 分钟后。这不是接收通知的延迟 - 这是与我的预期相比状态更改的延迟。状态更改后几秒钟内即可正确接收通知。
我们认为缺失数据是好的,因此根据指标图,我认为它应该在 17:22 恢复正常(在 17:21 期间出现 0 个错误之后),但仅在 17:27 延迟 5 分钟时恢复正常。
然后我预计它会在 17:24 恢复为“警报”,但直到 17:28 才恢复。
最后,我预计它会在 17:31 恢复正常,但直到 17:40 才恢复正常,整整过了 9 分钟。
为什么我预期状态转换与实际发生之间有 4-9 分钟的延迟?
我\xe2\x80\x99d 希望能够检测我的代码是否在 Fargate 任务上运行(而不是在 EC2 实例上),如果我可以从环境变量获取 Fargate 任务 ID,那将是理想的选择。
\n然后我将使用此信息进行日志记录和配置。
\n许多 CI 环境设置了一些环境变量,允许我检测我的代码是否在 CI 中。
\nAWS有类似的事情吗?
\n我在 celery 中使用任务继承max_retries: 3来重试( )某些异常并记录失败。
是on_failure在每次失败的尝试时调用还是仅在最后一次尝试(在我的例子中是第三次)之后调用?
def __call__(self, *args, **kwargs):
try:
return self.run(*args, **kwargs)
except InterfaceError as exc:
self.retry(exc=exc, countdown=5, max_retries=3)
def on_failure(self, exc, task_id, args, kwargs, einfo):
log(exc) # This is a gross simplification of the logging
Run Code Online (Sandbox Code Playgroud)