JavaScript Promises 对象
Promise 对象属性
JavaScript Promise 对象可以是:
- Pending
- Fullfilled
- Rejected
Promise 对象支持两个属性:state 和 result。
当 Promise 对象 "pending"(工作)时,结果是 undefined。
当 Promise 对象 "fulfilled" 时,结果是一个值。
当一个 Promise 对象是 "rejected" 时,结果是一个错误对象。
myPromise.state | myPromise.result |
---|---|
"pending" | undefined |
"fulfilled" | a result value |
"rejected" | an error oject |
如何使用 Promise
以下是使用 Promise 的方法:
promise.then(function(result)
{ // 如果有效 }, { // 如果它坏了 }
);
{ // 如果有效 }, { // 如果它坏了 }
);
实例
function myDisplayer(some) {
document.getElementById("demo").innerHTML = some;
}
let myPromise = new Promise(function(myResolve, myReject) {
let x = 0;
// 生产代码(可能需要一些时间)
if (x == 0) {
myResolve("OK");
} else {
myReject("Error");
}
});
myPromise.then(
function(response) {myDisplayer(response);},
function(error) {myDisplayer(error);}
);
document.getElementById("demo").innerHTML = some;
}
let myPromise = new Promise(function(myResolve, myReject) {
let x = 0;
// 生产代码(可能需要一些时间)
if (x == 0) {
myResolve("OK");
} else {
myReject("Error");
}
});
myPromise.then(
function(response) {myDisplayer(response);},
function(error) {myDisplayer(error);}
);
等待文件
我们可以使用上一章的例子:
实例
let myPromise = new Promise(function(myResolve, myReject) {
let req = new XMLHttpRequest();
req.open('GET', "mycar.htm");
req.onload = function() {
if (req.status == 200) {
myResolve(req.response);
}
else {
myReject("File not Found");
}
};
req.send();
});
myPromise.then(
function(response) {myDisplayer(response);},
function(error) {myDisplayer(error);}
);
let req = new XMLHttpRequest();
req.open('GET', "mycar.htm");
req.onload = function() {
if (req.status == 200) {
myResolve(req.response);
}
else {
myReject("File not Found");
}
};
req.send();
});
myPromise.then(
function(response) {myDisplayer(response);},
function(error) {myDisplayer(error);}
);
浏览器支持
ECMAScript 2015,也称为 ES6,引入了 JavaScript Promise 对象。
下表注明了首个完全支持 Promise 对象的浏览器版本:
Chrome 33 | Edge 12 | Firefox 29 | Safari 7.1 | Opera 20 |
Feb, 2014 | Jul, 2015 | Apr, 2014 | Sep, 2014 | Mar, 2014 |