ES6 規定,Promise對象是一個構造函數,用來生成Promise實例。
resolve函數的作用是,將Promise對象的狀態從“未完成”變為“成功”(即從 pending 變為 resolved),在異步操作成功時調用,并將異步操作的結果,作為參數傳遞出去;reject函數的作用是,將Promise對象的狀態從“未完成”變為“失敗”(即從 pending 變為 rejected),在異步操作失敗時調用,并將異步操作報出的錯誤,作為參數傳遞出去。
let promise = new Promise(function(resolve,reject){
if(true){
resolve("修改狀態");
}else{
reject(error);
}
})
promise.then(function(value){
alert(value) //value是resolve()的參數
},function(error) {
// body...
alert(error)
});
let fn = ()=>{
return 3;
}
let promise = new Promise(function(resolve,reject){
if(true){
resolve(fn());
}else{
reject(error);
}
})
promise.then(function(value){
alert(value) //3
},function(error) {
// body...
alert(error)
});
ajax使用Promise對象的實例:
const getJSON = function(url) {
const promise = new Promise(function(resolve, reject){
const handler = function() {
if (this.readyState !== 4) {
return;
}
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error(this.statusText));
}
};
const client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechange = handler;
client.responseType = "json";
client.setRequestHeader("Accept", "application/json");
client.send();
});
return promise;
};
getJSON("/posts.json").then(function(json) {
console.log('Contents: ' + json);
}, function(error) {
console.error('出錯了', error);
});