我想在我的应用程序中发出请求时显示加载程序。但有时我的服务器响应太快,加载器只是闪烁一瞬间,导致不愉快的体验。
过去我一直做的是使用combineLatest
atimer
来创建最小的请求延迟。
const request = getRequestPromise();
await lastValueFrom(combineLatest([request, timer(1000)]).pipe(mapRx(([x]) => x)))
其作用是,如果服务器在不到一秒内响应,则只需在解析之前等待 1 秒即可。然而,如果服务器在 3 秒内响应,则此代码不会增加额外的一秒。
这一直很有效。但我刚刚意识到,如果请求失败(导致异常),它不会遵守最小延迟。它会立即解决并导致令人不快的加载器闪烁。
我如何才能同时处理失败和成功的请求?
我仍然需要能够处理请求本身的成功/错误:
await lastValueFrom(combineLatest([request, timer(1000)])
.pipe(mapRx(([x]) => x)))
.then(() => console.log('handle successful request'))
.catch(() => console.log('handle error'))