Hämta data med en Get-request om man får error på sin put-request

Permalänk
Medlem

Hämta data med en Get-request om man får error på sin put-request

Är lite ny på front-end och sitter med ett lite intressant problem på jobbet. Tanken är att när vi fångar ett felmeddelande vid en put-request så ska vi uppdatera resursen med en get-request för att säkerställa att vi är på senaste versionen. Jag lyckas ej få det att fungera dock.

Lite pseudokod:

catch(error){ console_log("Denna printen fungerar dock"); Get_request() }

Printen printar men get_requesten går ej ut (övervakar i network tab i chrome). Använder JS.

EDIT. Verkar vara ett internt problem och inte programmeringsmässigt. Tack för alla svar

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem

Pseudokoden i ditt inlägg är trasig när jag läser den.

PUT är uppdatering. I normalfallet har man läst resursen (GET) innnan man försöker uppdaterar den och fått ut någon form av versionsinformation som man ska skicka med vid uppdateringen. Om någon annan uppdaterat resursen under tiden så svarar servern med ett fel, ofta HTTP status 409. Det är nödvändigt att skilja på olika typer av fel vid anrop av servern.

I det läget får man felhantera, kanske visa ett felmeddelande för användaren att den information som denne utgick ifrån inte längre gäller. Att bara blint skriva över med ny information kan vara problematiskt.

Permalänk
Medlem
Skrivet av KAD:

Pseudokoden i ditt inlägg är trasig när jag läser den.

PUT är uppdatering. I normalfallet har man läst resursen (GET) innnan man försöker uppdaterar den och fått ut någon form av versionsinformation som man ska skicka med vid uppdateringen. Om någon annan uppdaterat resursen under tiden så svarar servern med ett fel, ofta HTTP status 409. Det är nödvändigt att skilja på olika typer av fel vid anrop av servern.

I det läget får man felhantera, kanske visa ett felmeddelande för användaren att den information som denne utgick ifrån inte längre gäller. Att bara blint skriva över med ny information kan vara problematiskt.

Vi har versionshantering av informationen vilket gör att vid varje request mot servern säkerställs det att man är på samma version remote och locally. Felmeddelande ges till kunden men det har efterfrågats att vi gör en get-request när vi fångar en error (så som 409). Det är ej nödvändigt att skilja på olika typer av fel i detta fallet. Andra användare kan ej uppdatera resursen då resursen är knuten till användaren.

För att förtydliga, jag frågar alltså enbart om hur man får en get-request att uppdatera när man fångar ett fel

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Medlem
Skrivet av Pelegrino:

Vi har versionshantering av informationen vilket gör att vid varje request mot servern säkerställs det att man är på samma version remote och locally. Felmeddelande ges till kunden men det har efterfrågats att vi gör en get-request när vi fångar en error (så som 409). Det är ej nödvändigt att skilja på olika typer av fel i detta fallet. Andra användare kan ej uppdatera resursen då resursen är knuten till användaren.

För att förtydliga, jag frågar alltså enbart om hur man får en get-request att uppdatera när man fångar ett fel

Vad är det som inte fungerar? Har du provat kasta ut lite console.log() i din get_request-funktion? Att bara kolla i nätversktabben lär inte hjälpa vid felsökningen

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

Nu mins jag inte varför. Men det går inte att göra fetch i en catch (catch från try catch då). Du får antingen göra det i den vanliga catch från fetchen..

fetch("MY_API", { ... }).then(/*OK*/).catch(() => fetch("MY_API", { ... }))

eller om du kör i try catch så får du köra en check i finally

(async () => { let success = false; try { await fetch("MY_API", { ... }); } catch(error) { success = false; } finally { if(success === false) { const _ = await fetch("MY_API", { ... }); if(_.ok) { const res = await _.json(); console.log(res) } } } })()

Permalänk
Medlem
Skrivet av Pelegrino:

Är lite ny på front-end och sitter med ett lite intressant problem på jobbet. Tanken är att när vi fångar ett felmeddelande vid en put-request så ska vi uppdatera resursen med en get-request för att säkerställa att vi är på senaste versionen. Jag lyckas ej få det att fungera dock.

Lite pseudokod:

catch(error){ console_log("Denna printen fungerar dock"); Get_request() }

Printen printar men get_requesten går ej ut (övervakar i network tab i chrome). Använder JS.

Behöver se hela koden. Http-anrop är asynkrona och du verkar inte vänta in ditt metodanrop, hur ser koden i Get_request ut? Har du lyckats debugga med breakpoints?

Permalänk
Medlem
Skrivet av Pamudas:

Vad är det som inte fungerar? Har du provat kasta ut lite console.log() i din get_request-funktion? Att bara kolla i nätversktabben lär inte hjälpa vid felsökningen

Verkar vara ett internt problem, testade nu med en vanlig request

const test = fetch('https://httpbin.org/get').then(response => { console.log(response); });

och det fungerade. Får kolla vidare mer.

Skrivet av zaibuf:

Behöver se hela koden. Http-anrop är asynkrona och du verkar inte vänta in ditt metodanrop, hur ser koden i Get_request ut? Har du lyckats debugga med breakpoints?

Tyvärr är det inte ett alternativ men som jag skrev ovan verkar det vara ett internt problem.

Skrivet av timerx:

Nu mins jag inte varför. Men det går inte att göra fetch i en catch (catch från try catch då). Du får antingen göra det i den vanliga catch från fetchen..

fetch("MY_API", { ... }).then(/*OK*/).catch(() => fetch("MY_API", { ... }))

eller om du kör i try catch så får du köra en check i finally

(async () => { let success = false; try { await fetch("MY_API", { ... }); } catch(error) { success = false; } finally { if(success === false) { const _ = await fetch("MY_API", { ... }); if(_.ok) { const res = await _.json(); console.log(res) } } } })()

Det gick bra att köra en fetch i en catch enligt tidigare svar ovan.

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl