Zadejte hledaný výraz...

Jak vrátit hodnotu získanou uvnitř then

Hezký den,
Mám v komponentě metodu getMyStringValue pomocí které z AsyncStorage vytáhnu uloženou hodnotu. 
V metodě geJsCode tu hodnotu vložím do řetězce. 
Problém mám s tím, že ten řetězec z té metody nedokáži vrátit. 
Zkoušel jsem set state, ale to je neustále null. 
Děkuji za každou radu. 
Kód je:
2. 3. 2022 16:41:49
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1499003
TomasX
verified
rating uzivatele
(4 hodnocení)
2. 3. 2022 16:49:40
použij await. Opravil jsem ti tam i neošetřené escapování userToken, což může být podstatná zranitelnost.
getMyStringValue = async () => {
try {
let value = await AsyncStorage.getItem( 'deviceToken' );
return value;
} catch(e) {
}
}
getJsCode = () => {
let userToken = await this.getMyStringValue()
let jsCodeString =`(function() {
var targetForm = document.getElementById('js-mobile-connect-token');
var hiddenDiv = targetForm.getElementsByClassName( 'hidden' );
hiddenDiv.setAttribute('style', 'display: block !important');
targetForm.getElementsByTagName('input').value = `+JSON.stringify(userToken)+`;
})();`;
return jsCodeString;
}
2. 3. 2022 16:49:40
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1499002
To mi hlásí unexpected reserved word await. 
2. 3. 2022 16:57:25
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1499001
TomasX
verified
rating uzivatele
(4 hodnocení)
2. 3. 2022 17:10:35
ha, pardon, uprav řádek s getJsCode na
getJsCode = async () => {
Opomněl jsem to, await může být pouze v async scopu, nedělám v tom jazyku každý den, tak to nemám v prstech.
2. 3. 2022 17:10:35
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1499000
No tak to jsem se obloukem dostal tam kde jsem už byl. 
Místo řetězce dostávám - {"_U": 0, "_V": 0, "_W": null, "_X": null} a v tom stavu jsem už byl. 
Když jsem použil then: this.getMyStringValue().then((userToken)=>{} tak userToken byl řetězec, ale pak jsem zase nebyl schopen tu hodnotu vrátit. 
2. 3. 2022 17:20:50
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1498999
hm
verified
rating uzivatele
(20 hodnocení)
2. 3. 2022 17:50:11
Je to react? A ty to potrebujes setnout do statu? Do jake promenne ve statu? 
asynchornni kod neumi vracet primo data, jen promisy... mozna by stacilo v tom tvem puvodnim kodu na miste console.log pouzit this.setState({jsCodeString});
ale to nemuzu vedet kdyz nevmi jak vypada state a kde se ten js code uklada :) 
2. 3. 2022 17:50:11
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1498998
Napsal Aleš Jiříček;1641286
Je to react? A ty to potrebujes setnout do statu? Do jake promenne ve statu? 
asynchornni kod neumi vracet primo data, jen promisy... mozna by stacilo v tom tvem puvodnim kodu na miste console.log pouzit this.setState({jsCodeString});
ale to nemuzu vedet kdyz nevmi jak vypada state a kde se ten js code uklada :) 
Je to React. klidně zapaltím konzultaci, je to poslední věc, která mi v tom chybí, aby to fungovalo.
2. 3. 2022 18:32:10
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1498997
hm
verified
rating uzivatele
(20 hodnocení)
2. 3. 2022 18:53:46
Napsal Musilda;1641289
Je to React. klidně zapaltím konzultaci, je to poslední věc, která mi v tom chybí, aby to fungovalo.
Poradim zadara, hod nakej instant messaging nebo neco co ti prijde vhodny na vyreseni do soukromy zpravy
2. 3. 2022 18:53:46
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1498996
TomasX
verified
rating uzivatele
(4 hodnocení)
2. 3. 2022 19:35:27
A proč to tak chceš udělat? Jak vypadá okolí kódu? Jak psal Aleš, pokud to máš v reactu, tomu stačí ten promise podstrčit.
Nelze snadno a bez složitého obcházení převést async na sync a nedoporučuji se o to ani pokoušet. Správně se to dělá tak, že ten sync kód zavoláš až když máš výsledek a nikoliv, že budeš blokovat event loopu, abys vyčkal na výsledek nějakéhé async kódu, to bys šel proti myšlenkám JS.
Takže obecně se výsledek takovéhoto kódu používá jako:
nebo přímo v reactu jako {getJsCode} jak psal Aleš.
2. 3. 2022 19:35:27
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1498995
Napsal Aleš Jiříček;1641291
Poradim zadara, hod nakej instant messaging nebo neco co ti prijde vhodny na vyreseni do soukromy zpravy
Napsal jsem.
---------- Příspěvek doplněn 02.03.2022 v 20:58 ----------
Napsal TomášX;1641294
A proč to tak chceš udělat? Jak vypadá okolí kódu? Jak psal Aleš, pokud to máš v reactu, tomu stačí ten promise podstrčit.
Nelze snadno a bez složitého obcházení převést async na sync a nedoporučuji se o to ani pokoušet. Správně se to dělá tak, že ten sync kód zavoláš až když máš výsledek a nikoliv, že budeš blokovat event loopu, abys vyčkal na výsledek nějakéhé async kódu, to bys šel proti myšlenkám JS.
Takže obecně se výsledek takovéhoto kódu používá jako:
nebo přímo v reactu jako {getJsCode} jak psal Aleš.
Kdyby to bylo tak jednoduché :-) 
---------- Příspěvek doplněn 02.03.2022 v 21:23 ----------
Napsal Musilda;1641295
Napsal jsem.
---------- Příspěvek doplněn 02.03.2022 v 20:58 ----------
Kdyby to bylo tak jednoduché :-) 
Tak vyřešeno díky Alešovi. Nakonec to bylo jednoduché :-D
2. 3. 2022 19:49:08
https://webtrh.cz/diskuse/jak-vratit-hodnotu-ziskanou-uvnitr-then#reply1498994
Pro odpověď se přihlašte.
Přihlásit