Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.javascript > #3486
| From | Roman Tyczka <noemail@because.no> |
|---|---|
| Newsgroups | pl.comp.lang.javascript |
| Subject | Re: Promise i oczekiwanie na wynik |
| Date | 2018-08-08 23:34 +0200 |
| Organization | ATMAN - ATM S.A. |
| Message-ID | <1x6oxswxeel0t$.dlg@tyczka.com> (permalink) |
| References | <1jv3988qj6pyf.dlg@tyczka.com> <nu2wq6mg704y$.wuh3wxwx318r$.dlg@40tude.net> |
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
Back to pl.comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar
Promise i oczekiwanie na wynik Roman Tyczka <noemail@because.no> - 2018-08-07 16:35 +0200
Re: Promise i oczekiwanie na wynik Borys Pogoreło <borys@pl.edu.leszno> - 2018-08-08 22:29 +0200
Re: Promise i oczekiwanie na wynik Roman Tyczka <noemail@because.no> - 2018-08-08 23:34 +0200
Re: Promise i oczekiwanie na wynik Borys Pogoreło <borys@pl.edu.leszno> - 2018-08-10 11:53 +0200
Re: Promise i oczekiwanie na wynik Roman Tyczka <noemail@because.no> - 2018-08-10 12:49 +0200
Re: Promise i oczekiwanie na wynik Cezary Tomczyk <cezary.tomczyk@gmail.com> - 2018-08-10 17:22 +0300
Re: Promise i oczekiwanie na wynik Roman Tyczka <noemail@because.no> - 2018-08-10 18:19 +0200
Re: Promise i oczekiwanie na wynik Borys Pogoreło <borys@pl.edu.leszno> - 2018-08-10 22:31 +0200
csiph-web