Promise javascript là gì

Xin chào, nếu đã có lần thiết kế cùng với Javascript, hẳn bạn đã sở hữu đôi lần nghe nói / sử dụng callbaông xã. Và với sự cách tân và phát triển như hiện thời của Javascript, thì bao gồm một vấn đề rất là nhức nhối hận đã có biểu thị với callbachồng của Javascript, đó là callbachồng hell.Dưới đó là ví dụ (yaoming)


*

Và nhằm xử lý vụ việc này, gồm một lời hứa đã có được hiện nay hóa, vâng tên của chính nó chính là Promise. Trong bài dịch lần này từ bỏ SitePoint (https://www.sitepoint.com/overview-javascript-promises/), bản thân vẫn ra mắt Promise cùng công dụng của chính nó vào vấn đề giải quyết và xử lý lô bên trên tê

Đây thực sự là 1 trong những tin giỏi lành, giống như là kim cương Giáng Sinc giành cho các Javascript Developers vậy. Bạn đang Cảm Xúc thật niềm hạnh phúc lúc biết rằng Promise giờ đồng hồ đang trở thành một Một trong những thư viện chuẩn của JavaScript. Chrome 32 bạn dạng beta sẽ implement những API Promise basic. Tư tưởng của Promise không hề mới cùng với developer. Hầu hết chúng ta ddax từng dùng Promise vào một vài tlỗi viện đã gồm của JS như là Q, when, RSVPhường, Bluebird,... Ngay cả jQuery cũng có một chức năng gọi là Deferred Object hoạt động tương tự nlỗi Promise. Nhưng việc Promise được support native sầu thiệt xứng đáng kinh ngạc. Và bài viết sau đây vẫn miêu tả hầu như điểm cơ phiên bản của Promise và cách để gửi code JS của người tiêu dùng lên một trung bình cao new

Overview

Một object Promise thay mặt cho 1 cực hiếm làm việc thời điểm này hoàn toàn có thể chưa xuất hiện, nhưng sẽ được giải pháp xử lý cùng có giá trị vào một thời gian như thế nào đó sau đây. Việc này để giúp bạn viết những cái code giải pháp xử lý không đồng điệu trông có vẻ như đồng điệu hơn. Lấy ví dụ, nếu như bạn áp dụng Promise đến việc Điện thoại tư vấn API để đưa dữ liệu, các bạn sẽ tạo thành một đối tượng Promise đại diện mang đến data đem được tự API. Điều cốt tử sống đây là dữ liệu vẫn chưa xuất hiện ngơi nghỉ thời gian đối tượng người dùng Promise được tạo thành, mà chỉ có thể truy vấn sau khoản thời gian có response từ bỏ website service. Trong thời gian ngóng rước dữ liệu, Promise object sẽ đóng vai trò nlỗi một proxy cho dữ liệu. hơn nữa, chúng ta cũng có thể lắp những callback vào Promise object để triển khai Việc xử trí tài liệu. Các callbachồng này sẽ chỉ thực hiện lúc tài liệu đã chuẩn bị sẵn sàng.Quý Khách vẫn xem: Promise javascript là gì

Promise API

Tiếp theo phía trên chúng ta sẽ tới cùng với những API cơ bản của PromiseĐể ban đầu, hãy thuộc khám phá đoạn code sau, đó là bí quyết khởi chế tác một đối tượng người dùng Promise .

Bạn đang xem: Promise javascript là gì

if (window.Promise) // Check if the browser supports Promises var promise = new Promise(function(resolve, reject) //asynchronous code goes here );Chúng ta ban đầu cùng với việc khởi tạo một đối tượng Promise cùng truyền vào đó một hàm callbaông chồng. Hàm callbaông chồng này sẽ dìm 2 tsi mê số là resolve sầu với reject, với cả 2 tyêu thích số đều sở hữu phong cách là hàm (function). Tất cả những code bất đồng điệu vẫn bên trong hàm callbaông xã này. Nếu mọi sản phẩm công nghệ thành công xuất sắc, Promise sẽ tiến hành ngừng và hàm resolve sẽ tiến hành hotline. Trong ngôi trường vừa lòng có lỗi, hàm reject sẽ tiến hành Điện thoại tư vấn với cùng 1 đối tượng người sử dụng Error, nhằm khẳng định rằng Promise này đã bị không thành công.

Giờ hãy thử xây đắp một ví dụ dễ dàng và đơn giản để biểu hiện bí quyết áp dụng Promise. Các dòng code sau sẽ tạo một request bất đồng điệu (asynchronous) đến một web service với trả về một quãng JSON. Chúng ta đã tìm hiểu Promise chuyển động trong ngôi trường hợp này như thế nào

if (window.Promise) console.log("Promise found"); var promise = new Promise(function(resolve, reject) var request = new XMLHttpRequest(); request.open("GET", "http://api.icndb.com/jokes/random"); request.onload = function() if (request.status == 200) resolve(request.response); // we got data here, so resolve the Promise else reject(Error(request.statusText)); // status is not 200 OK, so reject ; request.onerror = function() reject(Error("Error fetching data.")); // error occurred, reject the Promise ; request.send(); //sover the request ); console.log("Asynchronous request made."); promise.then(function(data) console.log("Got data! Promise fulfilled."); document.getElementsByTagName("body").textContent = JSON.parse(data).value.joke; , function(error) console.log("Promise rejected."); console.log(error.message); ); else console.log("Promise not available");Tại đoạn code phía bên trên, phần khởi tạo nên Promise cất những code bất đồng điệu sử dụng đến bài toán rước tài liệu từ web service trải qua API. Tại đây, chúng ta tạo ra một Ajax request mang đến mặt đường links http://api.icndb.com/jokes/random, links này đã trả về một câu chuyện mỉm cười ngẫu nhiên. lúc tất cả response trả về (JSON string), nội dung của response sẽ tiến hành truyền cùng cách xử lý vì chưng hàm resolve(). Nếu có bất kỳ lỗi như thế nào xẩy ra, hàm reject() sẽ được Hotline với input đầu vào là đối tượng người tiêu dùng Error.

Xem thêm: Tại Sao Vị Thế Xã Hội Của Phụ Nữ Thấp Hơn Nam Giới, Bình Đẳng Và Phân Biệt Đối Xử (Văn Phòng Hà Nội)

Code ở trên được thử nghiệm ở chỗ này. quý khách hàng có thể refresh lại page để mỗi lần bắt gặp một mẩu chuyện mỉm cười khác biệt. Đồng thời hãy thử nhảy console của trình thông qua, tự kia các bạn sẽ thấy thiết bị tự thực hiện code. Lưu ý rằng một promise sẽ sở hữu 3 tinh thần :

Pending (vẫn xử lý)Fulfilled (sẽ trả thành)Rejected (đã bị trường đoản cú chối)

Mỗi đối tượng Promise sẽ có một thuộc tính private cất tâm lý bây giờ của Promise. Lúc một Promise được kết thúc tuyệt lắc đầu, cực hiếm của nằm trong tính này sẽ ngay lập tức nhanh chóng được cập nhật với tâm trạng của Promise. Như vậy Có nghĩa là một Promise chỉ hoàn toàn có thể thành công xuất sắc hoặc thất bại một lượt nhất. Nếu một Promise đã có hoành thành, và kế tiếp bạn new điện thoại tư vấn hàm then() của promise và truyền vào 2 callback, thì callbaông chồng thành công xuất sắc sẽ luôn được Call. Vì cố gắng, vào quả đât của Promise, họ không quan lại tới sự việc lúc nào Promise được giải pháp xử lý. Chúng ta chỉ quan tâm cho kết quả áp ra output của Promise.

Nối các Promise

Sẽ có nhiều bọn họ mong muốn nối những promises với nhau. Ví dụ, chúng ta cũng có thể có tương đối nhiều làm việc bất đồng nhất bắt buộc cách xử trí. Khi một thao tác trả về dữ liệu, bạn sẽ bắt đầu một xử trí bất đồng hóa không giống thực hiện 1 phần dữ liệu tự làm việc trước kia, cùng cứ liên tục điều đó. Promise cung ứng việc nối các Promise cùng nhau y hệt như ví dụ bên dưới đây

function getPromise(url) // trả về một Promise ở ddây // gửi một request lấy dữ liệu xuất phát điểm từ 1 url (request sự không tương đồng bộ) // sau khoản thời gian lấy về tác dụng, xử lý promise cùng với tài liệu nhấn đượcvar promise = getPromise("some url here");promise.then(function(result) //họ gồm dữ liệu của url "some url here" ở chỗ này return getPromise(result); //cùng trả về một promise khác).then(function(result) //tại chỗ này đựng kết quả promise vừa trả về sinh hoạt trên cùng logic để giải pháp xử lý dữ liệu cuối cùng);Có một điều xứng đáng lưu ý ngơi nghỉ đó là khi 1 quý giá thường thì được trả về trong hàm then() thứ nhất, hàm then() thiết bị nhì đã thực hiện với giá trị đó. Nhưng nếu như khách hàng trả về 1 Promise ở hàm then() trước tiên, thì hàm then() vật dụng nhì đang đợi còn chỉ được gọi cho tới Lúc Promise sinh sống hàm then() trước tiên triển khai xong xuôi xuôi.

Xem thêm: Nếu Đang Lăn Tăn Giữa Công Nghệ Oled Và Qled Tv Là Gì, Có Nên Mua Tivi Qled Không

Xử lý lỗi

Trước kia tôi đã trình làng hàm then() đang dìm 2 hàm callbacks làm cho tđắm đuối số. Hàm callbachồng thứ hai sẽ tiến hành call Lúc Promise bị không đồng ý. Tuy nhiên họ cũng có một phương pháp khác, áp dụng một hàm tên là catch(), chúng ta cũng có thể xử trí lúc Promise bị không đồng ý. Đoạn code dưới đây biểu đạt việc sử dụng hàm catch():

promise.then(function(result) console.log("Got data!", result);).catch(function(error) console.log("Error occurred!", error););Đoạn ở trên tương tự với :

Tổng kết

Trên đây chỉ cần hầu hết giới thiệu cơ bản về API Promise của Javascript. Khi nắm rõ nó, chúng ta có thể viết code giải pháp xử lý những thao tác làm việc bất đồng điệu một phương pháp thuận tiện. Chúng ta có thể xử lý nhỏng thông thường nhưng không đề xuất quan tâm cực hiếm sẽ được trả về tiếp nối về sau. Có một vài API về Promise chưa được liệt kê ở đây. Để xem thêm, các bạn có thể tham khảo một số trong những tài liệu sau.


Chuyên mục: Kiến Thức