Wpis z mikrobloga

#javascript #programowanie

Bawię się javascriptem aby sobie popatrzeć jak działają async/await w stosunku do C# (for science) i znalazłem na jakiejś stronce ( https://devenv.pl/async-await-podstawy-jezyka-javascript/ ) taki przykładowy kod:

const cityAPI = 'https://www.mocky.io/v2/5a945fa435000074009b0e78';

async function app(){
const city1Request = fetch(cityAPI).then(r => r.json());
const city2Request = fetch(cityAPI).then(r => r.json());

const [city1, city2] = await Promise.all([city1Request, city2Request]);

console.log(city1.name);
console.log(city2.name);
}
app();

Niestety wykonuje się on u mnie synchronicznie patrząc na network w Chrome. Tu jest jakiś błąd czy coś?
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@SuppressWarnings: @chrzano: No facet w przykładzie pokazywał, że wykonuje się to jednocześnie. Natomiast tak się nie dzieje. Nawet w C# +- podobny kod zachowałby się tak, że te dwa fetche wystartują jednocześnie, natomiast funkcja będzie czekać na awaicie aż oba się zakończą i dopiero wtedy pójdzie dalej.
  • Odpowiedz
@sokytsinolop: Powiem szczerze, że nawet opakowałem te fetche w osobną funkcję async żeby mieć pewność, że to się odpali gdzieś na boku i nadal jest to samo. Jest jakaś inna metoda aby powiedzieć JSowi że ma to odpalić w innym wątku? Jak Task.Run() w C# czy coś w ten deseń?
  • Odpowiedz
@Khaine: Tu jest kwestia webworkerów bardziej. Silnik js jest synchroniczny. Przykładowo eventy są obsługiwane dopiero kiedy stack z execution context jest pusty.
  • Odpowiedz
@stacktrace: Huh, wygląda na to że Chrome po prostu nie pozwala puścić dwóch requestów na raz do tego samego miejsca. Do drugiego zasobu poleciał już asynchronicznie zgodnie z oczekiwaniami. To jak udało się na Chrome autorowi tego przykładu to zrobić?
  • Odpowiedz
@sokytsinolop: A te theny nie mają znaczenia, bo then wykonuje się potem, nadal asynchrocznicznie. Dopóki nie napotka na await, to leci asynchronicznie. Tak by było w C# i zapewne tak samo jest tutaj.

Sprawdziłem to nawet, i tych thenów tam może być pewnie i pińcet, ale dopóki nie zobaczy awaita to sobie będą żyć swoim życiem.
  • Odpowiedz