Đồng bộ
(Synchronous
)console.log("Line 1");
console.log("Line 2");
//Console
// Line 1
// Line 2
- **Bước 1: Chuẩn bị nguyên liệu**
- 500 g cá quả (hoặc cá chép, trắm, rô, basa, bông lau, lòng tong, thu,...).
- 2 củ hành khô
- 3 tép tỏi
- 1 mẩu gừng
- 3 quả ớt hiểm
- 1,5 thìa canh nước mắm
- 1 thìa canh đường
- Dầu ăn
- Tiêu
- **Bước 2: Sơ chế nguyên liệu**
- 1. Chà xát da cá và bụng cá với giấm và muối cho sạch nhớt. Cạo sạch máu đọng và màng đen trong bụng cá. Rửa lại bằng nước lạnh, để ráo.
- 2. Hành tỏi băm nhỏ. Gừng thái sợi. Ớt đập dập.
- **Bước 3: Ướp cá**
- 1. Ướp cá với 1,5 thìa canh mắm, 1 thìa canh đường, ớt.
- 2. Làm nóng nồi/chảo với 2 thìa canh dầu ăn. Thắng nước hàng (nước màu) với 1 thìa canh đường. Khi đường vừa chuyển màu mật ong, tắt bếp.
- 3. Cho hành, tỏi, gừng vào phi thơm.
- 4. Đợi hỗn hợp hành tỏi nguội, trút hết vào ướp cá.
- 5. Ướp cá 30-60 phút trong tủ lạnh.
- **Bước 4: Kho cá**
- 1. Xếp cá vào nồi/chảo, đậy vung.
- 2. Bật lửa lớn cho nồi sôi lên khoảng 5 phút rồi hạ xuống lửa nhỏ nhất. Nếu thấy nước không đủ ngập sâm sấp khúc cá thì châm nước sôi.
- 3. Kho cá đậy vung, lửa nhỏ khoảng 1 tiếng tới khi nước kho sệt lại. Sau khi kho được 30-40 phút, bạn nhẹ nhàng lật cá để 2 mặt đều ngấm gia vị.
- **Bước 5: Hoàn thành**
- Rắc nhiều tiêu trước khi ăn. Cá kho ăn nóng hoặc nguội với cơm nóng, rau luộc.
- Vấn đề nảy sinh
Nếu cần thực hiện một lúc nhiều công việc cùng lúc, và nếu một công việc nào đó chưa thực hiện xong thì vẫn cho công việc kế tiếp thực hiện thì là thế nào???
Vậy lúc này cần xử lý Bất đồng bộ
(Asynchronous
)
setTimeout(() => {
console.log("Line 1");
}, 1000);
console.log("Line 2");
//Console
// Line 2
// Line 1
console.log("Line 1");
nằm ở trên câu lệnh console.log("Line 2");
nhưng khi in ra vẫn bị in sau.Asynchronous
cho phép xử lý Đa luồng
so Synchronous
với chỉ cho phép xử lý Đơn luồng
.mới chuẩn bị Nguyên liệu lại đem đi kho mà chưa sơ chế được
.Asynchronous(Món 1) // Dish01
Synchronous(Bước 1) // Task01
Synchronous(Bước 2) // Task02
Synchronous(Bước 3) // Task03
Asynchronous(Món 2) // Dish02
Synchronous(Bước 1) // Task01
Synchronous(Bước 2) // Task02
Synchronous(Bước 3) // Task03
Synchronous(Bước 4) // Task04
Asynchronous(Món 3) // Dish03
Synchronous(Bước 1) // Task01
Synchronous(Bước 2) // Task02
Asynchronous(Dish01){ // Chế biến món 1
Process(Task01) // Thực hiện bước 1
if(Task01 Done){ // Nếu bước 1 hoàn thành
Process(Task02) // Thực hiện bước 2
if(Task02 Done){ // Nếu bước 2 hoàn thành
Process(Task03) // Thực hiện bước 3
if(Task03 Done){
Process(Task04)
if(Task04 Done){
Process(Task05)
if(Task05 Done){
Process(Task06)
if(Task06 Done){
if(Task06 Done){
...
}
}
}
}
}
}
}
}
Ta xét ví dụ: In ra màn hình dãy số tăng dần sau mỗi giây(Không sử dụng chức năng setInterval)
function logCount(ms) {
setTimeout(function () {
console.log(1);
setTimeout(function () {
console.log(2);
setTimeout(function () {
console.log(3);
setTimeout(function () {
console.log(4);
setTimeout(function () {
console.log(5);
setTimeout(function () {
console.log(6);
setTimeout(function () {
console.log(7);
setTimeout(function () {
console.log(8);
}, ms);
}, ms);
}, ms);
}, ms);
}, ms);
}, ms);
}, ms);
}, ms);
}
logCount(1000);
Callback Hell
.Giải pháp xử lý nào cho vấn đề này?
-> Và Promise
được sinh ra để giải quyết nỗi đau này.
Promise làm giảm độ phức tạp Callback Hell
trong viết lệnh code lồng nhau nhiều lần.