Article View: pl.comp.lang.javascript
Article #51920Re: Promise i oczekiwanie na wynik
From: Roman Tyczka
Date: Wed, 08 Aug 2018 21:34
Date: Wed, 08 Aug 2018 21:34
52 lines
3107 bytes
3107 bytes
On Wed, 8 Aug 2018 22:29:26 +0200, Borys Pogoreło wrote: > Dnia Tue, 7 Aug 2018 16:35:54 +0200, Roman Tyczka napisał(a): > >> spodziewając się, że race() będzie czekać, tymczasem race() przechodzi bez >> zatrzymania, mimo, że hash_promise nadal jest pending i do return trafia >> pusty string haszyk, bo go nikt nie wypełnił. > > Nie wkleiłeś całego kodu, ale czy przypadkiem nie zwracasz zmiennej > "haszyk" od razu? Ona zostanie zmieniona dopiero gdy Promise się rozwiąże. > > I generalnie Promise.race() nie do tego służy. To stosunkowo rzadko > potrzebne narzędzie, które czeka na wynik jednej z wielu promises. Niby > można by tego użyć w zaproponowany przez Ciebie sposób, ale jest to > kompletnie zbędne. Wystarczy się od razu odwołać do obiektu. > >> Jak zmusić JS, żeby czekał aż asynchroniczne zadanie będzie wykonane? > > Nie zmusisz. Musisz myśleć asynchronicznie - kod operujący na wyniku > funkcji haszującej musi poczekać na wynik Promise: > > https://jsfiddle.net/fzLbqmng/ Powiedzmy, że rozumiem jako tako jak to działa, jest to dość sprytne. Tylko, że teraz jest problem. Mam kod, który wywołuję pod buttonem, to klasyczny kod sekwencyjny. Linia po linii zbiera dane, łączy stringi, liczy hasze, coś tam jeszcze robi i na końcu wrzuca wynik do jakiegoś pola/zmiennej. I jeśli teraz jedna potrzebna funkcja czyli hasz narzuca mi styl asynchroniczny to zmusza do przeorania całego kodu na ten model i wołania wszystkiego w kolejnych promisach i then'ach. Pewnie, że to fajne, elastyczne i generalnie lepsze, ale są sytuacje gdy nie chcę przerabiać kodu do tej wymuszonej asynchroniczności, co wtedy? Przykładowo mam stary kod: value = valueX + valuY + SHA512(valueZ); value = cryptoAES(value); Prosta rzecz. A teraz muszę ten cały kod zawijać w, skądinnąd użyteczne, ale wygibasy, promisów. Czy mogę jakoś wymusić synchroniczność? Próbowałem z tym async/await ale to nie zadziałało. Może coś źle robiłem, a może to musi być nowsza przeglądarka. ps. dlaczego w ogóle ten moduł crypto wsadzili w Promise? Z powodu złożoności obliczeniowej i realnie długiego czasu wykonania? -- pozdrawiam Roman Tyczka
Technical Details
Message-ID:
<1x6oxswxeel0t$.dlg@tyczka.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<1jv3988qj6pyf.dlg@tyczka.com> <nu2wq6mg704y$.wuh3wxwx318r$.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Roman Tyczka <noemail@because.no> Newsgroups: pl.comp.lang.javascript Subject: Re: Promise i oczekiwanie na wynik Date: Wed, 8 Aug 2018 23:34:09 +0200 Organization: ATMAN - ATM S.A. Lines: 52 Sender: romek@tyczka.no.found Message-ID: <1x6oxswxeel0t$.dlg@tyczka.com> References: <1jv3988qj6pyf.dlg@tyczka.com> <nu2wq6mg704y$.wuh3wxwx318r$.dlg@40tude.net> NNTP-Posting-Host: ip-94-75-90-137.wave.com.pl Mime-Version: 1.0 X-Trace: node1.news.atman.pl 1533764049 31342 94.75.90.137 (8 Aug 2018 21:34:09 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Wed, 8 Aug 2018 21:34:09 +0000 (UTC) User-Agent: 40tude_Dialog/2.0.15.84 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit