AWAIT LÀ GÌ

Callbaông chồng có nhiều nhược điểm. Lúc ta có nhiều thao tác bất đồng bộ, những callback nên chờ nhau thực hiện, thời gian nhằm ngừng có khả năng sẽ bị kéo dài ra hơn. Hình như, vấn đề viết các callbachồng lồng nhau cũng tạo nên mã mối cung cấp của ta trắc trở cùng khó khăn bảo trì.

Bạn đang xem: Await là gì

Thật như mong muốn, trong phiên bạn dạng ES6 , JavaScript đã được thêm thêm ( .then() ) Promise. Nó là một trong thay thế tuyệt đối mang đến callbacks cùng số đông xã hội nhanh chóng chuyển lịch sự thực hiện nó nhằm thay thế mang đến callbacks. Code bắt đầu của chúng ta tương tự cùng với code cũ, hiệu quả là trông dễ dàng theo dõi với bảo trì hơn. Tuy nhiên các vụ việc của callbaông chồng vẫn không được giải quyết triệt để.

Cuối thuộc, trong phiên bạn dạng ES7 cách đây không lâu tuyệt nhất, Async / Await đã được bổ xung để bài toán viết code bất đồng bộ trong JavaScript giỏi rộng, code dễ dàng chú ý rộng và dễ sử dụng rộng.

Async / Await là gì?

Async / Await là 1 trong những khả năng của JavaScript góp chúng ta thao tác cùng với những hàm bất đồng bộ theo cách thú vui hơn cùng dễ nắm bắt rộng. Nó được thành lập trên Promises cùng tương thích cùng với tất cả những Promise dựa trên API. Trong đó:

Async - knhì báo một hàm bất đồng hóa (async function someName()...).

Tự đụng thay đổi một hàm thường thì thành một Promise.khi Hotline tới hàm async nó vẫn cách xử trí những thứ cùng được trả về công dụng vào hàm của nó.Async được cho phép thực hiện Await.

Await - tạm dừng bài toán triển khai các hàm async. (Var result = await someAsynchotline ()

*
.

Xem thêm: Previous 80+ Từ Vựng Tiếng Anh Chủ Đề Rau Cải Xanh Tiếng Anh Là Gì ?

khi được đặt trước một Promise, nó đã đợi cho đến Lúc Promise xong với trả về công dụng.Await chỉ thao tác làm việc với Promises, nó không vận động với callbacks.Await chỉ hoàn toàn có thể được thực hiện bên trong những function async.

Dưới đấy là một ví dụ dễ dàng mà mong muốn đã ví dụ những điều trên:

Dưới phía trên chúng ta đã viết cùng một chức năng cùng với 2 phương pháp khác nhau: cách thứ 1 với Promises, và biện pháp thứ hai cùng với Async / Await

// giải pháp 1: function getJSON() // To make the function blocking we manually create a Promise. return new Promise( function(resolve) axios.get("https://tutorialzine.com/misc/files/example.json") .then( function(json) // The data from the request is available in a .then bloông xã // We return the result using resolve sầu. resolve(json); ); ); // biện pháp 2: // Async/Await approach // The async từ khóa will automatically create a new Promise và return it. async function getJSONAsync() // The await từ khóa saves us from having to lớn write a .then() blochồng. let json = await axquả táo.get("https://tutorialzine.com/misc/files/example.json"); // The result of the GET request is available in the json variable. // We return it just like in a regular synchronous function. return json; Cả nhì hàm bên trên các thực hiện một tác dụng hoàn toàn giống nhau - cả nhị số đông trả về Promises cùng giải quyết và xử lý cùng với bình luận JSON từ axios. Tuy nhiên, phiên phiên bản Async / Await ngắn thêm một đoạn với đọc dễ rộng.Chúng ta rất có thể điện thoại tư vấn hàm async của họ nlỗi sau: getJSONAsync().then( function(result) // Do something with result. );Vậy Khi tất cả Async / Await gồm làm cho promises lỗi thời?Không hoàn toàn. lúc làm việc cùng với Async / Await, thật ra bọn họ vẫn sẽ áp dụng ngầm Promises. Vì thay, bao gồm cả khi sẽ sử dụng Async / Await yêu cầu một sự gọi biết giỏi về Promises đã cực tốt đến họ.

Trong khi, bao gồm trường hợp cơ mà Async / Await không áp dụng được cùng bọn họ yêu cầu sử dụng Promises. lấy ví dụ như Lúc họ buộc phải Call nhiều thao tác làm việc bất đồng bộ và đợi cho toàn bộ chúng hoàn thành. Nếu bọn họ test và có tác dụng điều này cùng với async với await, Điều gì vẫn xảy ra: Hãy coi ví dụ dưới đây những các bạn sẽ thấy

async function getABC () let A = await getValueA(); // getValueA takes 2 second khổng lồ finish let B = await getValueB(); // getValueB takes 4 second to lớn finish let C = await getValueC(); // getValueC takes 3 second to finish return A*B*C; Mỗi lần hotline cho tới hàm await đã ngóng cho tới Khi hàm await trước kia dứt. Vì những wait vẫn đợi cùng triển khai tuần trường đoản cú từng cái một, cục bộ tác dụng đang mất 9 giây để triển khai ngừng hàm từ trên đầu đến cuối (2 + 4 + 3).Đây không phải là 1 trong giải pháp tối ưu bởi A, B cùng C ko dựa vào sát vào nhau, chúng ta không cần phải biết quý hiếm của A trước lúc chúng ta đã có được B. Vì vậy, bạn có thể mang chúng và một dịp cùng thời hạn chờ đón sẽ tiến hành giảm bớt đi.Trong trường vừa lòng như thế này, áp dụng Promise vẫn tương thích hơn. Để gửi tất cả các trải đời đồng thời, bọn họ áp dụng Promise.all(). Việc thực hiện Promise.all() sẽ bảo vệ chúng ta tất cả tất cả các công dụng trước lúc tiếp tục thực hiện code, nhưng mà việc Call mang đến các hàm bất đồng bộ sẽ được chạy song song nhưng mà chưa phải tuần từ từng chiếc một. async function getABC () // Promise.all() allows us khổng lồ send all requests at the same time. let results = await Promise.all(< getValueA, getValueB, getValueC >); return results.reduce((total,value) => total * value); Bằng bí quyết này, thời hạn triển khai hàm sẽ mất it hơn. hàm getValueA và getValueC đang tiến hành kết thúc trước khi getValueB hoàn thành. Ttuyệt bởi nên mất 9 giây để chờ từng hàm trả về cực hiếm như trên, chúng ta đang chỉ mất 4 giây để hóng cả 3 hàm trả về giá trị.Xử lý lỗi vào Async / AwaitMột điều tuyệt đối không giống về Async / Await là nó chất nhận được chúng ta bắt các lỗi không ý muốn đợi bằng phương pháp sử dụng try / catch. Chúng ta chỉ việc để các await hotline của bọn họ vào vào kân hận try/catch như sau: async function doSomethingAsync() try // This async gọi may fail. let result = await someAsyncCall(); catch(error) // If it does we will catch the error here. Mệnh đề catch sẽ giải pháp xử lý những lỗi tạo ra bởi vì các hàm bất đồng nhất hoặc ngẫu nhiên lỗi làm sao chúng ta có thể sẽ viết bên trong kân hận try.

Trong một vài tình huống, bọn họ cũng có thể bắt các lỗi Khi đã triển khai function async. Vì tất cả các hàm async gần như trả về Promises, chúng ta chỉ cần gọi thêm hàm .catch() Khi Gọi bọn chúng.

// Async function without a try/catch bloông xã. async function doSomethingAsync() // This async Call may fail. let result = await someAsyncCall(); return result; // We catch the error upon calling the function. doSomethingAsync(). .then(successHandler) .catch(errorHandler);Dựa vào những tình huống ví dụ, bọn họ đang thực hiện try/catch hoặc .catch() để bắt cùng giải pháp xử lý lỗi. Tuy nhiên, họ không nên thực hiện cả hai cùng một lúc bởi vì nó có thể dẫn mang đến những sự việc không hề muốn.Hỗ trợ trình duyệtAsync / Await hoàn toàn có thể thực hiện vào đa số những trình duyệt bao gồm, ngoài IE11 - toàn bộ các trình phê duyệt sẽ nhận thấy mã async / await của khách hàng nhưng ko buộc phải những thư viện phía bên ngoài.Nếu chúng ta dùng Node cũng có thực hiện async trường đoản cú Node 8 trở lên. Nó vẫn biến chuyển LTS vào thời điểm cuối trong năm này.Nếu cái này không đáp ứng nhu cầu được nhu cầu của người tiêu dùng, cũng đều có một số trong những trình biến đổi JS nlỗi Babel và TypeScript và thỏng viện Node.js async/await cung cấp các phiên bản căn nguyên riêng của chức năng này.Phần kết luậnVới vấn đề bổ sung cập nhật Async / Await trong ngôn từ JavaScript gồm một bước nhảy đầm vọt về kỹ năng đọc dễ dàng và dễ dàng thực hiện cho những người bắt đầu ban đầu với các lập trình JavaScript cùng bạn sẽ tất cả kinh nghiệm tay nghề.

Một số chia sẻ bao gồm mình chỉ mang tính chất hóa học cá nhân, hoàn toàn có thể chưa chính xác, các bạn cứ cmt , chia sẻ những gì em, mình chưa đúng ạ