Await là gì

     

Callback có tương đối nhiều nhược điểm. Lúc ta có khá nhiều thao tác sự không tương đồng bộ, các callback bắt buộc chờ nhau thực hiện, thời hạn để hoàn thành sẽ bị kéo dãn hơn. Xung quanh ra, câu hỏi viết các callback lồng nhau cũng làm cho mã mối cung cấp của ta vấn đề và cực nhọc bảo trì.

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

Thật may mắn, vào phiên bản ES6 , JavaScript sẽ được bổ sung thêm ( .then() ) Promise. Nó là một trong những thay thế tuyệt vời cho callbacks và hầu hết xã hội nhanh chóng chuyển sang thực hiện nó để sửa chữa thay thế cho callbacks. Code mới của họ gần giống như với code cũ, công dụng là trông dễ dàng theo dõi và gia hạn hơn. Tuy vậy các sự việc của callback vẫn chưa được giải quyết và xử lý triệt để.

Cuối cùng, vào phiên bản ES7 gần đây nhất, Async / Await đã được thêm để vấn đề viết code bất đồng nhất trong JavaScript xuất sắc hơn, code dễ quan sát hơn cùng dễ áp dụng hơn.

Async / Await là gì?

Async / Await là 1 tính năng của JavaScript giúp chúng ta làm việc với các hàm bất đồng nhất theo giải pháp thú vị hơn và dễ dàng nắm bắt hơn. Nó được xây đắp trên Promises và tương hợp với tất cả các Promise dựa trên API. Vào đó:

Async – khai báo một hàm bất nhất quán (async function someName()…).

Tự động biến hóa một hàm thường thì thành một Promise.Khi điện thoại tư vấn tới hàm async nó đang xử lý đa số thứ cùng được trả về hiệu quả trong hàm của nó.Async được cho phép sử dụng Await.

Xem thêm: Link Tải 10 Game One Piece Hay Nhất Trên Mobile Và Pc, Tặng Free Luffy Mũ Rơm

Await – tạm ngưng việc thực hiện các hàm async. (Var result = await someAsyncCall ()


*

.Khi được đặt trước một Promise, nó sẽ đợi cho tới khi Promise ngừng và trả về kết quả.Await chỉ làm việc với Promises, nó không hoạt động với callbacks.Await chỉ hoàn toàn có thể được sử dụng phía bên trong các function async.

Dưới đó là một ví dụ đơn giản mà hi vọng sẽ ví dụ những điều trên:

Dưới đây bọn họ sẽ viết thuộc một tính năng với 2 giải pháp khác nhau: giải pháp thứ 1 cùng với Promises, với cách thứ 2 với Async / Await

// cách 1: function getJSON() // to lớn 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 block // We return the result using resolve. Resolve(json); ); ); // cách 2: // Async/Await approach // The async keyword will automatically create a new Promise & return it. Async function getJSONAsync() // The await từ khoá saves us from having khổng lồ write a .then() block. Let json = await axios.get(“https://tutorialzine.com/misc/files/example.json”); // The result of the GET request is available in the json variable. // We return it just lượt thích in a regular synchronous function. Return json; Cả nhì hàm trên đều thực hiện một công dụng hoàn toàn giống như nhau – cả hai mọi trả về Promises và giải quyết với phản hồi JSON từ bỏ axios. Mặc dù nhiên, phiên bản Async / Await ngắn hơn và đọc dễ hơn.Chúng ta rất có thể gọi hàm async của bọn họ như sau: getJSONAsync().then( function(result) // vị something with result. );Vậy khi bao gồm Async / Await có tạo cho promises lỗi thời?Không trả toàn. Khi thao tác với Async / Await, thiệt ra chúng ta vẫn đang áp dụng ngầm Promises. Vì chưng thế, của cả khi đang áp dụng Async / Await yêu cầu một sự phát âm biết xuất sắc về Promises sẽ tốt nhất cho bọn chúng ta.

Ngoài ra, bao hàm trường hợp cơ mà Async / Await không áp dụng được và chúng ta phải áp dụng Promises. Ví dụ như khi chúng ta cần điện thoại tư vấn nhiều thao tác bất đồng điệu và chờ cho tất cả chúng kết thúc. Nếu chúng ta thử cùng làm vấn đề đó với async cùng await, Điều gì sẽ xảy ra: Hãy coi ví dụ sau đây các bạn sẽ thấy

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

Trong một vài ba tình huống, họ cũng rất có thể bắt những lỗi lúc đang tiến hành function async. Vì tất cả các hàm async số đông trả về Promises, chúng ta chỉ nên gọi thêm hàm .catch() khi hotline chúng.

// Async function without a try/catch block. 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 các tình huống cụ thể, bọn họ sẽ sử dụng try/catch hoặc .catch() để bắt và xử trí lỗi. Tuy nhiên, bọn họ không nên sử dụng cả 2 cùng một lúc do nó có thể dẫn đến những vấn đề không mong muốn muốn.Hỗ trợ trình duyệtAsync / Await rất có thể sử dụng trong hầu như các trình chú tâm chính, kế bên IE11 – tất cả các trình duyệt sẽ phân biệt mã async / await của bạn mà không cần các thư viện mặt ngoài.Nếu các bạn dùng Node cũng đều có sử dụng async từ bỏ Node 8 trở lên. Nó sẽ thay đổi LTS vào cuối năm nay.Nếu tính năng này không đáp ứng nhu cầu được yêu cầu của bạn, cũng có một số trình chuyển đổi JS như Babel và TypeScript cùng thư viện Node.js async/await cung ứng các phiên bản nền tảng riêng biệt của hào kiệt này.Phần kết luậnVới việc bổ sung cập nhật Async / Await trong ngôn ngữ JavaScript bao gồm một bước nhảy vọt về năng lực dễ đọc cùng dễ sử dụng cho người mới bước đầu với những lập trình JavaScript và fan đã có kinh nghiệm.

Một số share có bản thân chỉ mang tính chất chất cá nhân, có thể chưa chủ yếu xác, chúng ta cứ cmt , chia sẻ những gì em, mình chưa đúng ạ


Chuyên mục: Tin Tức