Đăng nhập
Bạn chưa có tài khoản? Đăng ký.
Bạn đã quên password?
Đối tượng JavaScript Promise
chứa cả mã sản xuất và các lệnh gọi đến mã sử dụng.
Cú pháp
var myPromise = new Promise(function(myResolve, myReject) { // "Producing Code" (Có thể mất chút thời gian) myResolve(); // Nếu thành công myReject(); // Nếu có lỗi }); // "Consuming Code" (Phải chờ đối tượng Promise hoàn thành) myPromise.then( function(value) { /* code nếu thành công */ }, function(error) { /* code nếu có lỗi */ } );
Khi mã sản xuất nhận được kết quả, nó sẽ gọi một trong hai lệnh gọi lại.
Kết quả | Gọi lại |
---|---|
Success | myResolve(Giá trị kết quả) |
Error | myReject(Đối tượng lỗi) |
Đối tượng Promise trong JavaScript có thể là.
Đối tượng Promise
hỗ trợ hai thuộc tính: state và result.
Trong khi một đối tượng Promise đang "pending" (đang hoạt động), result là không xác định.
Khi một đối tượng Promise được "Fulfilled" (hoàn thành), result là một giá trị.
Khi một đối tượng Promise bị "rejected" (từ chối), result là một đối tượng lỗi.
myPromise.state | myPromise.result |
---|---|
"pending" | undefined |
"fulfilled" | Giá trị kết quả |
"rejected" | Đối tượng lỗi |
Sau đây là cách sử dụng Promise.
myPromise.then( function(value) { /* code nếu thành công */ }, function(error) { /* code nếu có lỗi */ } );
Promise.then()
nhận hai đối số, một lệnh gọi lại cho thành công và một cho thất bại.Ví dụ
function myDisplayer(text) { document.getElementById('demo').innerHTML = text; } var myPromise = new Promise(function(myResolve, myReject) { var x = 0; // some code if (x == 0) { myResolve("OK"); } else { myReject("ERROR"); } }); myPromise.then( function (value) {myDisplayer(value)}, function (value) {myDisplayer(value)} );
Để chứng minh việc sử dụng Promise
, chúng ta sẽ sử dụng các ví dụ hàm gọi lại từ bài trước.
Ví dụ sử dụng Callback
Ví dụ
setTimeout(function() {myDisplayer("<h1>Hello JavaScript!</h1>")},3000); function myDisplayer(text) { document.getElementById('demo').innerHTML = text; }
Ví dụ sử dụng Promise
Ví dụ
var myPromise = new Promise(function(myResolve, myReject) { setTimeout(function() {myResolve("<h1>Hello JavaScript!</h1>");},3000) }); myPromise.then(function(value) {document.getElementById('demo').innerHTML = value});
Ví dụ sử dụng hàm gọi lại
Ví dụ
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } function getFile(myCallback) { var req = new XMLHttpRequest(); req.open('GET', "/exampleJS/mycar.html"); req.onload = function() { if (req.status == 200) { myCallback(this.responseText); } else { myCallback("Error: " + req.status); } } req.send(); } getFile(myDisplayer);
Ví dụ sử dụng Promise
Ví dụ
function myDisplayer(text) { document.getElementById('demo').innerHTML = text; } var myPromise = new Promise(function(myResolve, myReject) { var req = new XMLHttpRequest(); req.open('GET', "mycar.html"); req.onload = function() { if (req.status == 200) { myResolve(req.response); } else { myReject("File not Found"); } }; req.send(); }); myPromise.then( function(value) {myDisplayer(value);}, function(error) {myDisplayer(error);} );
ECMAScript 2015, còn được gọi là ES6, đã giới thiệu đối tượng JavaScript Promise.
Bảng sau đây xác định phiên bản trình duyệt đầu tiên có hỗ trợ đầy đủ cho các đối tượng Promise.
Chrome 33 | Edge 12 | Firefox 29 | Safari 7.1 | Opera 20 |
Feb, 2014 | Jul, 2015 | Apr, 2014 | Sep, 2014 | Mar, 2014 |