Skip to content

Commit e93f4f1

Browse files
committed
Set default response if all calls fail
1 parent 9306e9f commit e93f4f1

4 files changed

Lines changed: 22 additions & 9 deletions

File tree

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ example
6262
var cacheKey = "CACHE_KEY_HERE"
6363
var response = await storageService.CachedRequestAsync(cacheKey),
6464
async () => await apiClient.GetItemsAsync(),
65-
new CachedRequest{CachedAndReplace = true}, clt);
65+
new CachedRequest{CachedAndReplace = true},
66+
new YourObjectResponse(),
67+
clt);
6668
return response;
6769
}
6870

Src/Drogecode.Blazor.ExpireStorage/Drogecode.Blazor.ExpireStorage.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<RootNamespace>Drogecode.Blazor.ExpireStorage</RootNamespace>
8-
<Version>0.2.1</Version>
8+
<Version>0.2.2</Version>
99
<Title>Drogecode.Blazor.ExpireStorage</Title>
1010
<Authors>Taco Droogers</Authors>
1111
<PackageProjectUrl>https://github.com/Drogecode/Drogecode.Blazor.ExpireStorage</PackageProjectUrl>

Src/Drogecode.Blazor.ExpireStorage/Interfaces/IExpireStorageService.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ namespace Drogecode.Blazor.ExpireStorage;
44

55
public interface IExpireStorageService
66
{
7-
Task<TRes?> CachedRequestAsync<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TRes>(string cacheKey, Func<Task<TRes>> function, CachedRequest? request = null, CancellationToken clt = default);
8-
7+
/// <summary>
8+
/// Caches the request and returns the response.
9+
/// </summary>
10+
/// <param name="cacheKey">Uniek key for storage</param>
11+
/// <param name="function">Function to run</param>
12+
/// <param name="request">Object with configuration</param>
13+
/// <param name="defaultResponse">Response if function fails</param>
14+
/// <param name="clt">Cancelation token</param>
15+
/// <typeparam name="TRes">Type of return object</typeparam>
16+
/// <returns>Response from either function, cache, or default response</returns>
17+
Task<TRes?> CachedRequestAsync<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TRes>(string cacheKey, Func<Task<TRes>> function,
18+
CachedRequest? request = null, TRes? defaultResponse = default, CancellationToken clt = default);
919
}

Src/Drogecode.Blazor.ExpireStorage/Services/ExpireStorageService.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System.Diagnostics.CodeAnalysis;
22
using System.Text.Json;
33
using Drogecode.Blazor.ExpireStorage.Helpers;
4-
using Microsoft.AspNetCore.Components;
54

65
namespace Drogecode.Blazor.ExpireStorage;
76

@@ -45,10 +44,12 @@ public ExpireStorageService(
4544
_sessionStorageExpireService = sessionStorageExpireService;
4645
}
4746

47+
4848
public async Task<TRes?> CachedRequestAsync<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TRes>(
4949
string cacheKey,
5050
Func<Task<TRes>> function,
5151
CachedRequest? request = null,
52+
TRes? defaultResponse = default,
5253
CancellationToken clt = default)
5354
{
5455
request ??= new CachedRequest();
@@ -59,7 +60,7 @@ public ExpireStorageService(
5960
cacheKey += $"__{Postfix}";
6061
}
6162

62-
if (clt.IsCancellationRequested) return default;
63+
if (clt.IsCancellationRequested) return defaultResponse;
6364
if (request.CachedAndReplace && !(IsOffline && request.AlwaysCacheWhenOffline))
6465
{
6566
var requestCopy = request;
@@ -114,7 +115,7 @@ public ExpireStorageService(
114115

115116
if (request.IgnoreCache)
116117
{
117-
return default(TRes);
118+
return defaultResponse;
118119
}
119120

120121
try
@@ -145,7 +146,7 @@ public ExpireStorageService(
145146
{
146147
ConsoleHelper.WriteLine($"Retry calling {cacheKey}");
147148
request.RetryOnJsonException = false;
148-
return await CachedRequestAsync<TRes>(cacheKey, function, request, clt);
149+
return await CachedRequestAsync(cacheKey, function, request, defaultResponse, clt);
149150
}
150151

151152
ConsoleHelper.WriteLine($"Will not retry {cacheKey}");
@@ -155,7 +156,7 @@ public ExpireStorageService(
155156
ConsoleHelper.WriteLine(ex);
156157
}
157158

158-
return default(TRes);
159+
return defaultResponse;
159160
}
160161

161162
private async Task<TRes> RunSaveAndReturn<TRes>(string cacheKey, Func<Task<TRes>> function, CachedRequest request, CancellationToken clt)

0 commit comments

Comments
 (0)