Trong chức năng đầu tiên của bạn:
async function series() {
await wait(500); // 1
await wait(500); // 2
return "done!";
}
Bạn đang nói JS để chờ đợi sự wait
đầu tiên ngay sau khi nó đã bắt đầu.
Điều này có nghĩa thứ hai wait(500)
không thể bắt đầu, trước khi là người đầu tiên kết thúc:
- Kích hoạt
wait(500) // 1
- chờ đợi cho rằng để vượt qua
- Kích hoạt
wait(500) // 2
- chờ đợi cho rằng để vượt qua
Trong chức năng thứ hai:
async function parallel() {
const wait1 = wait(500); // 1
const wait2 = wait(500); // 2
await wait1;
await wait2;
return "done!";
}
Cả hai wait
cuộc gọi là bắt đầu, trước khi mã được yêu cầu chờ kết quả.
- Kích hoạt
wait(500) // 1
- Kích hoạt
wait(500) // 2
- Chờ
wait1
để vượt qua,
- chờ
wait2
để vượt qua
Vì wait1
và wait2
được kích hoạt ngay lập tức sau mỗi lần khác, họ đang thực tế chạy song song.
Hãy tưởng tượng này:
Nếu 2 người cả hai bắt đầu một đồng hồ bấm giờ cùng một lúc, nếu bạn cần phải chờ đợi trước mỗi đồng hồ bấm giờ đạt đến 10 giây, bạn vẫn chỉ phải chờ 10 giây.
Trong chức năng series
, mặt khác, đồng hồ bấm giờ thứ hai không thể bắt đầu trước khi đồng hồ đầu tiên kết thúc.
Bạn bắt đầu đợi() khi bạn gọi. Trong "loạt" bạn gọi nó và chờ đợi nó, sau đó gọi nó và chờ đợi nó một lần nữa. Trong "song song" bạn gọi hai wait() cùng một lúc, và THEN bạn đang chờ họ. Vì vậy, cả hai đều bắt đầu cùng một lúc. –
@korven không nên 'const wait1 = wait (500);' đã bắt đầu 'setTimeout' trước 'const wait2 = wait (500); 'được thực hiện? – Blake
Tại sao tôi không bao giờ "hoàn thành!" đăng nhập vào giao diện điều khiển Firefox trong khi thực hiện 'series()' hoặc 'parallel()'? – Marecky