🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.javascript
Article #51920

Re: Promise i oczekiwanie na wynik

#51920
From: Roman Tyczka
Date: Wed, 08 Aug 2018 21:34
52 lines
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-mail
References: <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