Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hôm nay chúng ta sẽ xây dựng và điều hành một cửa hàng kem và học JavaScript không đồng bộ cùng một lúc. Trên đường đi, bạn sẽ học cách sử dụng:ice cream shop and learn asynchronous JavaScript at the same time. Along the way, you'll learn how to use:

Show
  • Gọi lại
  • Hứa hẹn
  • Async / chờ đợi
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đây là những gì chúng tôi sẽ đề cập trong bài viết này:

  • JavaScript không đồng bộ là gì?
  • JavaScript không đồng bộ đồng bộ
  • Cách gọi lại hoạt động trong JavaScript
  • Cách những lời hứa hoạt động trong JavaScript
  • Làm thế nào Async / Await hoạt động trong JavaScript

Vì vậy, chúng ta hãy đi sâu vào!

Bạn cũng có thể xem hướng dẫn này trên YouTube nếu bạn thích:

JavaScript không đồng bộ là gì?

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

JavaScript không đồng bộ đồng bộ

Cách gọi lại hoạt động trong JavaScript

Cách những lời hứa hoạt động trong JavaScriptcallbacks, promises or Async/await – to run those small tasks in a way that you get the best results.

Làm thế nào Async / Await hoạt động trong JavaScript

JavaScript không đồng bộ đồng bộ

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Cách gọi lại hoạt động trong JavaScript

Cách những lời hứa hoạt động trong JavaScript

Làm thế nào Async / Await hoạt động trong JavaScript

Vì vậy, chúng ta hãy đi sâu vào!

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Bạn cũng có thể xem hướng dẫn này trên YouTube nếu bạn thích:

Nếu bạn muốn xây dựng các dự án một cách hiệu quả, thì khái niệm này là dành cho bạn.[single threaded]. Think about it like this – one thread means one hand with which to do stuff.

Lý thuyết về JavaScript Async giúp bạn chia các dự án phức tạp lớn thành các nhiệm vụ nhỏ hơn.

Sau đó, bạn có thể sử dụng bất kỳ trong ba kỹ thuật này - gọi lại, lời hứa hoặc async/chờ đợi - để chạy các nhiệm vụ nhỏ đó theo cách mà bạn có được kết quả tốt nhất.

Hãy đi sâu vào!

Hệ thống đồng bộ là gì?

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Trong một hệ thống đồng bộ, các nhiệm vụ được hoàn thành lần lượt.

Hãy nghĩ về điều này như thể bạn chỉ có một tay để hoàn thành 10 nhiệm vụ. Vì vậy, bạn phải hoàn thành một nhiệm vụ tại một thời điểm.

Hãy xem GIF 👇 - Một điều đang xảy ra tại một thời điểm ở đây:

  • Bạn sẽ thấy rằng cho đến khi hình ảnh đầu tiên được tải hoàn toàn, hình ảnh thứ hai không bắt đầu tải. system, three images are in the same lane. One can't overtake the other. The race is finished one by one. If image number 2 stops, the following image stops.
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
  • Vâng, JavaScript theo mặc định đồng bộ [một luồng đơn]. Hãy nghĩ về nó như thế này - một chủ đề có nghĩa là một tay để làm công cụ. the three images are in different lanes. They'll finish the race on their own pace. Nobody stops for anybody:
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hệ thống không đồng bộ là gì?

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Trong hệ thống này, các nhiệm vụ được hoàn thành độc lập.

Ở đây, hãy tưởng tượng rằng trong 10 nhiệm vụ, bạn có 10 tay. Vì vậy, mỗi bàn tay có thể thực hiện mỗi nhiệm vụ một cách độc lập và cùng một lúc.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hãy xem gif 👇 - bạn có thể thấy rằng mỗi hình ảnh tải cùng một lúc.

console.log(" I ");

console.log(" eat ");

console.log(" Ice Cream ");

Một lần nữa, tất cả các hình ảnh đang tải theo tốc độ của riêng họ. Không ai trong số họ đang chờ đợi bất kỳ ai trong số những người khác.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Để tóm tắt các JS không đồng bộ đồng bộ: JS không đồng bộ:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Khi ba hình ảnh đang ở trên một cuộc đua marathon, trong A:

Hệ thống đồng bộ, ba hình ảnh nằm trong cùng một làn. Người này không thể vượt qua người kia. Cuộc đua được hoàn thành từng cái một. Nếu hình ảnh số 2 dừng, hình ảnh sau sẽ dừng. Don't worry, we'll discuss the

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
6 function later in this article.

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")

Hệ thống không đồng bộ, ba hình ảnh ở các làn khác nhau. Họ sẽ kết thúc cuộc đua theo tốc độ của riêng họ. Không ai dừng lại cho bất cứ ai:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Ví dụ mã đồng bộ và không đồng bộ

Trước khi bắt đầu dự án của chúng tôi, chúng ta hãy xem xét một số ví dụ và làm rõ mọi nghi ngờ.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Ví dụ mã đồng bộ

Để kiểm tra một hệ thống đồng bộ, hãy viết mã này bằng JavaScript:

Đây là kết quả trong bảng điều khiển: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Ví dụ về mã không đồng bộ

Giả sử phải mất hai giây để ăn một ít kem. Bây giờ, hãy thử nghiệm một hệ thống không đồng bộ. Viết mã dưới đây trong JavaScript.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Lưu ý: Đừng lo lắng, chúng tôi sẽ thảo luận về chức năng
let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
6 sau trong bài viết này.

Và đây là kết quả trong bảng điều khiển: 👇

Bây giờ bạn đã biết sự khác biệt giữa các hoạt động đồng bộ và async, hãy xây dựng cửa hàng kem của chúng tôi.

Cách thiết lập dự án của chúng tôi

Đối với dự án này, bạn chỉ có thể mở Codepen.io và bắt đầu mã hóa. Hoặc, bạn có thể làm điều đó trong mã VS hoặc biên tập viên bạn chọn.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Mở phần JavaScript, và sau đó mở bảng điều khiển nhà phát triển của bạn. Chúng tôi sẽ viết mã của chúng tôi và xem kết quả trong bảng điều khiển.

Các cuộc gọi lại trong JavaScript là gì?

Khi bạn làm tổ một hàm bên trong một hàm khác như một đối số, đó được gọi là một cuộc gọi lại.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đây là một minh họa về một cuộc gọi lại:

Một ví dụ về một cuộc gọi lại

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đừng lo lắng, chúng ta sẽ thấy một số ví dụ về cuộc gọi lại trong một phút.

  • Tại sao chúng ta sử dụng các cuộc gọi lại?
  • Khi thực hiện một nhiệm vụ phức tạp, chúng tôi chia nhiệm vụ đó thành các bước nhỏ hơn. Để giúp chúng tôi thiết lập mối quan hệ giữa các bước này theo thời gian (tùy chọn) và đặt hàng, chúng tôi sử dụng các cuộc gọi lại.
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hãy xem ví dụ này: 👇

Biểu đồ chứa các bước để làm kem

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đây là những bước nhỏ bạn cần để làm kem. Cũng lưu ý rằng trong ví dụ này, thứ tự của các bước và thời gian là rất quan trọng. Bạn không thể cắt trái cây và phục vụ kem.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }

Đồng thời, nếu bước trước không hoàn thành, chúng ta không thể chuyển sang bước tiếp theo.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Để giải thích điều đó chi tiết hơn, hãy bắt đầu kinh doanh cửa hàng kem của chúng tôi.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };

Nhưng chờ đã ...orders. Once we have an order, we start production and then we serve ice cream. So, we'll create two functions ->

  • let stocks = {
        Fruits : ["strawberry", "grapes", "banana", "apple"],
        liquid : ["water", "ice"],
        holder : ["cone", "cup", "stick"],
        toppings : ["chocolate", "peanuts"],
     };
    
    7
  • let stocks = {
        Fruits : ["strawberry", "grapes", "banana", "apple"],
        liquid : ["water", "ice"],
        holder : ["cone", "cup", "stick"],
        toppings : ["chocolate", "peanuts"],
     };
    
    8
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đây là cách tất cả hoạt động: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Nhận đơn đặt hàng từ khách hàng, tìm nạp các thành phần, bắt đầu sản xuất, sau đó phục vụ.

Hãy tạo ra các chức năng của chúng tôi. Chúng tôi sẽ sử dụng các chức năng mũi tên ở đây:

let order = () =>{};

let production = () =>{};

Bây giờ, hãy thiết lập mối quan hệ giữa hai chức năng này bằng cách sử dụng cuộc gọi lại, như thế này: 👇

let order = (call_production) =>{

  call_production();
};

let production = () =>{};

Hãy làm một bài kiểm tra nhỏ

Chúng tôi sẽ sử dụng chức năng

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
9 để tiến hành các bài kiểm tra để xóa bỏ mọi nghi ngờ mà chúng tôi có thể có về cách chúng tôi thiết lập mối quan hệ giữa hai chức năng.

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};

Để chạy thử nghiệm, chúng tôi sẽ gọi hàm

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
7. Và chúng tôi sẽ thêm hàm thứ hai có tên
let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
8 làm đối số của nó.
let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
7
function. And we'll add the second function named
let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
8 as its argument.

// name 👇 of our second function
order(production);

Đây là kết quả trong bảng điều khiển của chúng tôi 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Nghỉ ngơi một lát

Cho đến nay rất tốt - hãy nghỉ ngơi!

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Xóa bảng điều khiển.log

Giữ mã này và xóa mọi thứ [không xóa biến cổ phiếu của chúng tôi]. Trong chức năng đầu tiên của chúng tôi, hãy vượt qua một đối số khác để chúng tôi có thể nhận được đơn đặt hàng [Tên trái cây]:

// Function 1

let order = (fruit_name, call_production) =>{

  call_production();
};

// Function 2

let production = () =>{};


// Trigger 👇

order("", production);

Dưới đây là các bước của chúng tôi, và thời gian mỗi bước sẽ thực hiện để thực hiện.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Biểu đồ chứa các bước để làm kem

Trong biểu đồ này, bạn có thể thấy rằng bước 1 là đặt thứ tự, mất 2 giây. Sau đó, bước 2 được cắt trái cây (2 giây), bước 3 là thêm nước và đá (1 giây), bước 4 là khởi động máy (1 giây), bước 5 là chọn thùng chứa (2 giây), bước 6 là chọn toppings (3 giây) và bước 7, bước cuối cùng, là phục vụ kem mất 2 giây.

Để thiết lập thời gian, hàm

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
6 là tuyệt vời vì nó cũng sử dụng một cuộc gọi lại bằng cách lấy một hàm làm đối số.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Cú pháp của hàm setTimeout ()

Bây giờ, hãy chọn trái cây của chúng tôi và sử dụng chức năng này:

// 1st Function

let order = (fruit_name, call_production) =>{

  setTimeout(function(){

    console.log(`${stocks.Fruits[fruit_name]} was selected`)

// Order placed. Call production to start
   call_production();
  },2000)
};

// 2nd Function

let production = () =>{
  // blank for now
};

// Trigger 👇
order(0, production);

Và đây là kết quả trong bảng điều khiển: 👇

Lưu ý rằng kết quả được hiển thị sau 2 giây. that the result is displayed after 2 seconds.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Nếu bạn đang tự hỏi làm thế nào chúng tôi chọn dâu tây từ biến chứng khoán của chúng tôi, thì đây là mã có định dạng 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đừng xóa bất cứ điều gì. Bây giờ chúng tôi sẽ bắt đầu viết chức năng sản xuất của mình với mã sau. Chúng tôi sẽ sử dụng các chức năng mũi tên:

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
0

Và đây là kết quả 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Chúng tôi sẽ tổ chức năng

let order = () =>{};

let production = () =>{};
3 khác trong chức năng
let order = () =>{};

let production = () =>{};
3 hiện tại của chúng tôi để cắt trái cây. Như thế này: 👇

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
1

Và đây là kết quả 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Chúng tôi sẽ tổ chức năng

let order = () =>{};

let production = () =>{};
3 khác trong chức năng
let order = () =>{};

let production = () =>{};
3 hiện tại của chúng tôi để cắt trái cây. Như thế này: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Biểu đồ chứa các bước để làm kem

Trong biểu đồ này, bạn có thể thấy rằng bước 1 là đặt thứ tự, mất 2 giây. Sau đó, bước 2 được cắt trái cây (2 giây), bước 3 là thêm nước và đá (1 giây), bước 4 là khởi động máy (1 giây), bước 5 là chọn thùng chứa (2 giây), bước 6 là chọn toppings (3 giây) và bước 7, bước cuối cùng, là phục vụ kem mất 2 giây.

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
2

Để thiết lập thời gian, hàm

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
6 là tuyệt vời vì nó cũng sử dụng một cuộc gọi lại bằng cách lấy một hàm làm đối số.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Cú pháp của hàm setTimeout ()

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Bây giờ, hãy chọn trái cây của chúng tôi và sử dụng chức năng này:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Và đây là kết quả trong bảng điều khiển: 👇

Lưu ý rằng kết quả được hiển thị sau 2 giây.

Nếu bạn đang tự hỏi làm thế nào chúng tôi chọn dâu tây từ biến chứng khoán của chúng tôi, thì đây là mã có định dạng 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đừng xóa bất cứ điều gì. Bây giờ chúng tôi sẽ bắt đầu viết chức năng sản xuất của mình với mã sau. Chúng tôi sẽ sử dụng các chức năng mũi tên:

Nghỉ ngơi một lát

Cho đến nay rất tốt - hãy nghỉ ngơi!

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Xóa bảng điều khiển.log

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Giữ mã này và xóa mọi thứ [không xóa biến cổ phiếu của chúng tôi]. Trong chức năng đầu tiên của chúng tôi, hãy vượt qua một đối số khác để chúng tôi có thể nhận được đơn đặt hàng [Tên trái cây]:

Dưới đây là các bước của chúng tôi, và thời gian mỗi bước sẽ thực hiện để thực hiện.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Biểu đồ chứa các bước để làm kem

Trong biểu đồ này, bạn có thể thấy rằng bước 1 là đặt thứ tự, mất 2 giây. Sau đó, bước 2 được cắt trái cây (2 giây), bước 3 là thêm nước và đá (1 giây), bước 4 là khởi động máy (1 giây), bước 5 là chọn thùng chứa (2 giây), bước 6 là chọn toppings (3 giây) và bước 7, bước cuối cùng, là phục vụ kem mất 2 giây.

  • Để thiết lập thời gian, hàm
    let stocks = {
        Fruits : ["strawberry", "grapes", "banana", "apple"],
        liquid : ["water", "ice"],
        holder : ["cone", "cup", "stick"],
        toppings : ["chocolate", "peanuts"],
     };
    
    6 là tuyệt vời vì nó cũng sử dụng một cuộc gọi lại bằng cách lấy một hàm làm đối số.
    This is the initial stage. Nothing happens here. Think of it like this, your customer is taking their time giving you an order. But they haven't ordered anything yet.
  • Cú pháp của hàm setTimeout () This means that your customer has received their food and is happy.
  • Bây giờ, hãy chọn trái cây của chúng tôi và sử dụng chức năng này: This means that your customer didn't receive their order and left the restaurant.

Và đây là kết quả trong bảng điều khiển: 👇

Lưu ý rằng kết quả được hiển thị sau 2 giây.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Nếu bạn đang tự hỏi làm thế nào chúng tôi chọn dâu tây từ biến chứng khoán của chúng tôi, thì đây là mã có định dạng 👇

  • Đừng xóa bất cứ điều gì. Bây giờ chúng tôi sẽ bắt đầu viết chức năng sản xuất của mình với mã sau. Chúng tôi sẽ sử dụng các chức năng mũi tên:
  • Và đây là kết quả 👇
  • Chúng tôi sẽ tổ chức năng
    let order = () =>{};
    
    let production = () =>{};
    
    3 khác trong chức năng
    let order = () =>{};
    
    let production = () =>{};
    
    3 hiện tại của chúng tôi để cắt trái cây. Như thế này: 👇
  • Nếu bạn nhớ, đây là các bước của chúng tôi:

Chúng ta hãy hoàn thành sản xuất kem của chúng ta bằng cách làm tổ một chức năng bên trong một chức năng khác - điều này còn được gọi là một cuộc gọi lại, hãy nhớ chứ?

Đừng xóa bất cứ điều gì. Bây giờ chúng tôi sẽ bắt đầu viết chức năng sản xuất của mình với mã sau. Chúng tôi sẽ sử dụng các chức năng mũi tên:

Và đây là kết quả 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Biểu đồ chứa các bước để làm kem

Trong biểu đồ này, bạn có thể thấy rằng bước 1 là đặt thứ tự, mất 2 giây. Sau đó, bước 2 được cắt trái cây (2 giây), bước 3 là thêm nước và đá (1 giây), bước 4 là khởi động máy (1 giây), bước 5 là chọn thùng chứa (2 giây), bước 6 là chọn toppings (3 giây) và bước 7, bước cuối cùng, là phục vụ kem mất 2 giây.

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
3

Để thiết lập thời gian, hàm

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
6 là tuyệt vời vì nó cũng sử dụng một cuộc gọi lại bằng cách lấy một hàm làm đối số.

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
4

Cú pháp của hàm setTimeout ()

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
5

Bây giờ, hãy chọn trái cây của chúng tôi và sử dụng chức năng này:

  • Và đây là kết quả trong bảng điều khiển: 👇
  • Lưu ý rằng kết quả được hiển thị sau 2 giây.
Nếu bạn đang tự hỏi làm thế nào chúng tôi chọn dâu tây từ biến chứng khoán của chúng tôi, thì đây là mã có định dạng 👇
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Let's add the time and work factors inside our promise using a

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
6 function inside our
let order = () =>{};

let production = () =>{};
9 statement. Follow me 👇

Đừng xóa bất cứ điều gì. Bây giờ chúng tôi sẽ bắt đầu viết chức năng sản xuất của mình với mã sau. Chúng tôi sẽ sử dụng các chức năng mũi tên: In real life, you can avoid the time factor as well. This is completely dependent on the nature of your work.

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
7

Và đây là kết quả 👇

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
8

Chúng tôi sẽ tổ chức năng

let order = () =>{};

let production = () =>{};
3 khác trong chức năng
let order = () =>{};

let production = () =>{};
3 hiện tại của chúng tôi để cắt trái cây. Như thế này: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Nếu bạn nhớ, đây là các bước của chúng tôi:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Và đây là kết quả 👇

Chúng tôi sẽ tổ chức năng

let order = () =>{};

let production = () =>{};
3 khác trong chức năng
let order = () =>{};

let production = () =>{};
3 hiện tại của chúng tôi để cắt trái cây. Như thế này: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Minh họa về chuỗi lời hứa bằng cách sử dụng. Sau đó, người xử lý

Người xử lý .Then trả lại một lời hứa khi lời hứa ban đầu của chúng tôi được giải quyết.

Đây là một ví dụ:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hãy để tôi đơn giản hơn: nó tương tự như hướng dẫn cho ai đó. Bạn nói với ai đó "trước tiên làm điều này, sau đó làm điều đó, sau đó điều này, sau đó .., sau đó .., sau đó ..." và cứ thế.

  • Nhiệm vụ đầu tiên là lời hứa ban đầu của chúng tôi.
  • Phần còn lại của các nhiệm vụ trả lại lời hứa của chúng tôi một khi một chút công việc được hoàn thành

Hãy thực hiện điều này trong dự án của chúng tôi. Ở dưới cùng của mã của bạn viết các dòng sau. 👇

Lưu ý: Đừng quên viết từ

let order = (call_production) =>{

  call_production();
};

let production = () =>{};
1 bên trong trình xử lý
let order = (call_production) =>{

  call_production();
};

let production = () =>{};
0 của bạn. Nếu không, nó sẽ không hoạt động đúng. Nếu bạn tò mò, hãy thử xóa trả lại sau khi chúng tôi hoàn thành các bước:
don't forget to write the
let order = (call_production) =>{

  call_production();
};

let production = () =>{};
1 word inside your
let order = (call_production) =>{

  call_production();
};

let production = () =>{};
0 handler. Otherwise, it won't work properly. If you're curious, try removing the return once we finish the steps:

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
9

Và đây là kết quả: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Sử dụng cùng một hệ thống, hãy kết thúc dự án của chúng tôi: 👇

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
0

Đây là kết quả: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Xử lý lỗi

Chúng tôi cần một cách để xử lý các lỗi khi có sự cố xảy ra. Nhưng trước tiên, chúng ta cần hiểu chu kỳ hứa hẹn:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Một minh họa về cuộc đời của một lời hứa

Để bắt lỗi của chúng tôi, hãy thay đổi biến của chúng tôi thành Sai.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
1

Có nghĩa là cửa hàng của chúng tôi đã đóng cửa. Chúng tôi không bán kem cho khách hàng của mình nữa.

Để xử lý việc này, chúng tôi sử dụng trình xử lý

let order = (call_production) =>{

  call_production();
};

let production = () =>{};
3. Giống như
let order = (call_production) =>{

  call_production();
};

let production = () =>{};
0, nó cũng trả lại một lời hứa, nhưng chỉ khi lời hứa ban đầu của chúng tôi bị từ chối.

Một lời nhắc nhở nhỏ ở đây:

  • let order = (call_production) =>{
    
      call_production();
    };
    
    let production = () =>{};
    
    0 hoạt động khi một lời hứa được giải quyết
  • let order = (call_production) =>{
    
      call_production();
    };
    
    let production = () =>{};
    
    3 hoạt động khi một lời hứa bị từ chối

Đi xuống phía dưới và viết mã sau: 👇

Chỉ cần nhớ rằng không có gì giữa trình xử lý

let order = (call_production) =>{

  call_production();
};

let production = () =>{};
0 trước đây của bạn và trình xử lý
let order = (call_production) =>{

  call_production();
};

let production = () =>{};
3.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
2

Đây là kết quả: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Một vài điều cần lưu ý về mã này:

  • Thông điệp đầu tiên đến từ phần
    let order = (call_production) =>{
    
      call_production();
    };
    
    let production = () =>{};
    
    9 trong lời hứa của chúng tôi
  • Tin nhắn thứ 2 đến từ trình xử lý
    let order = (call_production) =>{
    
      call_production();
    };
    
    let production = () =>{};
    
    3

Cách sử dụng trình xử lý .finally ()

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Có một thứ gọi là trình xử lý

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
1 hoạt động bất kể lời hứa của chúng tôi đã được giải quyết hay bị từ chối.

Ví dụ: cho dù chúng tôi không phục vụ khách hàng hay 100 khách hàng, cửa hàng của chúng tôi sẽ đóng cửa vào cuối ngày whether we serve no customers or 100 customers, our shop will close at the end of the day

Nếu bạn tò mò kiểm tra điều này, hãy đến ở rất dưới cùng và viết mã này: 👇

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
3

Kết quả: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Mọi người, xin vui lòng chào mừng Async / Await ~

Làm thế nào để Async / đang chờ hoạt động trong JavaScript?

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Đây được cho là cách tốt hơn để viết lời hứa và nó giúp chúng tôi giữ cho mã của chúng tôi đơn giản và sạch sẽ.

Tất cả bạn phải làm là viết từ

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
2 trước bất kỳ chức năng chính quy nào và nó trở thành một lời hứa.

Nhưng trước tiên, hãy nghỉ ngơi

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hãy xem: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Trước khi async/chờ đợi, để thực hiện một lời hứa, chúng tôi đã viết điều này:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
4

Bây giờ sử dụng async/chờ đợi, chúng tôi viết một cái như thế này:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
5

Nhưng chờ đã ......

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Bạn cần phải hiểu ->

  • Cách sử dụng từ khóa
    let order = (call_production) =>{
    
    console.log("Order placed. Please call production")
    
    // function 👇 is being called 
      call_production();
    };
    
    let production = () =>{
    
    console.log("Production has started")
    
    };
    
    3 và
    let order = (call_production) =>{
    
    console.log("Order placed. Please call production")
    
    // function 👇 is being called 
      call_production();
    };
    
    let production = () =>{
    
    console.log("Production has started")
    
    };
    
    4
  • Cách sử dụng từ khóa đang chờ đợi

Cách sử dụng thử và bắt từ khóa

Chúng tôi sử dụng từ khóa

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
3 để chạy mã của chúng tôi trong khi chúng tôi sử dụng
let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
4 để bắt lỗi. Đó là khái niệm tương tự chúng tôi đã thấy khi chúng tôi xem xét những lời hứa.

Hãy xem một so sánh. Chúng ta sẽ thấy một bản demo nhỏ của định dạng, sau đó chúng ta sẽ bắt đầu mã hóa.

Những lời hứa trong JS -> Giải quyết hoặc từ chối

Chúng tôi đã sử dụng giải quyết và từ chối trong những lời hứa như thế này:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
6

Async / chờ đợi trong js -> thử, bắt

Khi chúng tôi đang sử dụng Async/Await, chúng tôi sử dụng định dạng này:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
7

Đừng hoảng sợ, chúng tôi sẽ thảo luận về từ khóa

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
7 tiếp theo.

Bây giờ hy vọng bạn hiểu sự khác biệt giữa lời hứa và async / chờ đợi.

Cách sử dụng từ khóa đang chờ của JavaScript

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Từ khóa

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
7 làm cho JavaScript đợi cho đến khi một lời hứa giải quyết và trả về kết quả của nó.

Cách sử dụng từ khóa đang chờ đợi trong JavaScript

Hãy trở lại cửa hàng kem của chúng tôi. Chúng tôi không biết nên đứng đầu khách hàng có thể thích, sô cô la hoặc đậu phộng. Vì vậy, chúng tôi cần dừng máy của chúng tôi và đi và hỏi khách hàng của chúng tôi những gì họ muốn trên kem của họ.

Lưu ý ở đây rằng chỉ có nhà bếp của chúng tôi bị dừng lại, nhưng nhân viên của chúng tôi bên ngoài nhà bếp vẫn sẽ làm những việc như:

  • Làm các món ăn
  • Làm sạch các bàn
  • nhận đơn đặt hàng, và như vậy.

Một ví dụ về mã từ khóa đang chờ đợi

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Chúng ta hãy tạo ra một lời hứa nhỏ để hỏi sử dụng topping nào. Quá trình này mất ba giây.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
8

Bây giờ, hãy tạo chức năng nhà bếp của chúng tôi với từ khóa Async trước.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"]
 }
9

Hãy thêm các tác vụ khác bên dưới cuộc gọi

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
9.

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
0

Và đây là kết quả:

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Chúng tôi thực sự đang đi ra ngoài nhà bếp của chúng tôi để hỏi khách hàng của chúng tôi, "Lựa chọn topping của bạn là gì?" Trong thời gian đó, những thứ khác vẫn được thực hiện.

Một lần, chúng tôi có được sự lựa chọn topping của họ, chúng tôi vào bếp và hoàn thành công việc.

Ghi chú nhỏ

Khi sử dụng async/ chờ đợi, bạn cũng có thể sử dụng

let order = (call_production) =>{

  call_production();
};

let production = () =>{};
0,
let order = (call_production) =>{

  call_production();
};

let production = () =>{};
3 và
let order = () =>{};

let production = () =>{};
5 & NBSP; cũng là một phần cốt lõi của những lời hứa.

Hãy mở cửa hàng kem của chúng tôi một lần nữa

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Chúng ta sẽ tạo hai chức năng ->

  • // name 👇 of our second function
    order(production);
    
    3: để làm kem
  • // name 👇 of our second function
    order(production);
    
    4: Để chỉ định lượng thời gian mỗi nhiệm vụ nhỏ sẽ thực hiện.

Hãy bắt đầu! Đầu tiên, tạo hàm thời gian:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
1

Bây giờ, hãy tạo ra nhà bếp của chúng tôi:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
2

Hãy đưa ra hướng dẫn nhỏ và kiểm tra nếu chức năng nhà bếp của chúng tôi có hoạt động hay không:

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
3

Kết quả trông như thế này khi cửa hàng mở cửa: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Kết quả trông như thế này khi cửa hàng đóng cửa: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Càng xa càng tốt.

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Hãy hoàn thành dự án của chúng tôi.

Đây là danh sách các nhiệm vụ của chúng tôi một lần nữa: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ
Biểu đồ chứa các bước để làm kem

Đầu tiên, mở cửa hàng của chúng tôi

console.log("I");

// This will be shown after 2 seconds

setTimeout(()=>{
  console.log("eat");
},2000)

console.log("Ice Cream")
3

Bây giờ hãy viết các bước bên trong hàm

let order = (call_production) =>{

console.log("Order placed. Please call production")

// function 👇 is being called 
  call_production();
};

let production = () =>{

console.log("Production has started")

};
9 của chúng tôi: 👇

let stocks = {
    Fruits : ["strawberry", "grapes", "banana", "apple"],
    liquid : ["water", "ice"],
    holder : ["cone", "cup", "stick"],
    toppings : ["chocolate", "peanuts"],
 };
5

Và đây là kết quả: 👇

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

Sự kết luận

Xin chúc mừng đã đọc cho đến khi kết thúc! Trong bài viết này bạn đã học:

  • Sự khác biệt giữa các hệ thống đồng bộ và không đồng bộ
  • Các cơ chế của JavaScript không đồng bộ bằng cách sử dụng 3 kỹ thuật (gọi lại, lời hứa và async/ chờ đợi)

Đây là huy chương của bạn để đọc cho đến khi kết thúc. ❤

Đề xuất và phê bình được đánh giá cao ❤

Hướng dẫn asynchronous javascript freecodecamp - freecodecamp javascript không đồng bộ

YouTube / Joy Shaheb

LinkedIn / Joyshaheb

Twitter / Joyshaheb

Instagram / Joyshaheb

Tín dụng

  • Bộ sưu tập tất cả các hình ảnh được sử dụng
  • Unicorns, Kitty Avatar
  • con mèo tabby, người phụ nữ chiêm tinh học, hoa cúc girl
  • Cảm xúc nhân vật


Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu