Mam dwie funkcje async
. Obie oczekują na dwie 3-sekundowe wywołania funkcji. Ale drugi jest szybszy od pierwszego. Myślę, że szybszy biegnie równolegle, a drugi seryjnie. Czy moje założenie jest poprawne? Jeśli tak, dlaczego tak się dzieje, ponieważ obie funkcje wyglądają logicznie tak samo?Jak jest async/oczekiwać pracy w trybie szeregowym i równoległym?
function sleep() {
return new Promise(resolve => {
setTimeout(resolve, 3000);
});
}
async function serial() {
await sleep();
await sleep();
}
async function parallel() {
var a = sleep();
var b = sleep();
await a;
await b;
}
serial().then(() => {
console.log("6 seconds over");
});
parallel().then(() => {
console.log("3 seconds over");
});
Dlaczego sądzisz, że "setTimeout" jest asynchroniczne? W twoim kodzie nie ma nic asynchronicznego poza deklaracjami funkcji. – Mjh
@Mjh Errm, 'setTimeout' jest z natury bardzo asynchroniczny ... i prawie wszystko inne w kodzie OP jest również asynchroniczne ... – Frxstrem
@Frxstrem oprócz' setTimeout' nie jest wcale asynchroniczny. Jest to funkcja synchroniczna, która mówi pętli zdarzeń, aby wykonała funkcję w późniejszym czasie.Jest to * mechanizm *, w tym kodzie absolutnie NIC NIE jest asynchroniczny. Które dwie ruchome części poruszają się z różnymi prędkościami, w różnych kontekstach wykonania? Zero. Dlatego ten kod wcale nie jest asynchroniczny. – Mjh