Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.javascript > #3486

Re: Promise i oczekiwanie na wynik

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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