JS async / await

JS async / await
« kdy: 09. 11. 2019, 18:10:24 »
mam takyto kod:

try {
    const result = await nejakaFunkciaVolajuceAPIVracajucaPromise();
    // ... spracovanie responsu
} catch (e) {
    // chcem dochytit http error 422 a spolu s nou precitat data z response
    // akym sposobom precitam ten response?

   console.log(e.data); //vypise undefined
   console.log(e.response); //vypise undefined
   console.log(e.error); //vypise undefined
   // tak v akej property najdem tie data ktore mi vracia server?
   // viem ze tam su lebo ked ich vypisem
   console.log(e);
   // tak tam su ale to je pre mna nerelevantne ja tie data potrebujem dalej vypisat v confirm boxe a neviem sa n nim dopracovat
   // rovnako ich mam v zalozke network
}

ostatne popisane v komentaroch


gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:JS async / await
« Odpověď #1 kdy: 09. 11. 2019, 19:03:31 »
asi  e.message

Re:JS async / await
« Odpověď #2 kdy: 09. 11. 2019, 21:34:24 »
asi  e.message

Pes bol naozaj zakopaný v e.message, ale nešlo to čítať priamo. Nakoniec som spravil jeden dirty hack, ktorý funguje. Všimol som si že console.log vypisuje string, ktorý obsahuje na konci JSON. Len na začiatku bolo niečo čo do JSONu nepatrí. Odtránil som teda začiatok stringu, až po znak { a skonvertoval na JSON. Nečakal som že to bude fungovať ale ono to kupodivu funguje. Takže som na to spravil classu aby som nemusel zakaždým objavovať ameriku. Je to veľmi hnusné riešenie ale iný priamočiarejší spôsob som nenašiel. Googlil som asi 2 hodiny a nikde žiadna info ako na to, vyzerá to tak že ten HTML5 štandard takto zmršili úmyselne.

Re:JS async / await
« Odpověď #3 kdy: 10. 11. 2019, 22:50:10 »
Jak to souvisí s async/await? Není to snad záležitost té volané asynchroní funkce, jakou vyhodí výjimku? Může vyhodit cokoliv.

Pokud jde o dotaz "Chci někam vypsat to co mi nějaká API funkce vrátila jako odpověd, kterou, když ji zavolám přímo, vidím na obrazovce v prohlížeči", tak pokud tato odpověď je HTML stránka, pak nezbývá, než nažhavit HTML parser, načíst stránku jako dokument, a vytáhnout z document.body té stránky její innerText.

Mé řešení z jedné starší stránky, která ještě nepoužívá async ani await ani šipkové funkce vypadá takto. V proměnné "e" je chybové responze funkce fetch(). Zprávu hleda v elementu <p>, Pokud tam není, vezme celé <body>

Kód: [Vybrat]
var ct = e.headers.get("Content-Type");
if (ct == "text/html" || ct == "application/xhtml+xml") {
txt = e.text().then(function(text) {
var parser = new DOMParser();
var htmlDocument = parser.parseFromString(text, ct);
var el = htmlDocument.body.querySelector("p");
if (!el) el = htmlDocument.body;
return el.innerText;
});
} else {
txt = e.text();
}