? ? ? ?Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強大。它由社區(qū)最早提出和實現(xiàn),ES6 將其寫進了語言標準,統(tǒng)一了用法,原生提供了Promise對象。
? ???????????Promise的構造函數(shù)接收一個參數(shù),是函數(shù),并且傳入兩個參數(shù):resolve,reject,分別表示異步操作執(zhí)行成功后的回調(diào)函數(shù)和異步操作執(zhí)行失敗后的回調(diào)函數(shù)。其實這里用“成功”和“失敗”來描述并不準確,按照標準來講,resolve是將Promise的狀態(tài)置為fullfiled,reject是將Promise的狀態(tài)置為rejected。

function ajax(method, url){
????????????return new Promise((resolve, reject) => {
????????????????var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
????????????????if(method == 'GET') {
????????????????????xhr.open('GET', url, true);
????????????????????xhr.send(null);
????????????????????}else{
????????????????????????reject(new Error('請求相關錯誤'));
????????????????????}
????????????????xhr.onreadystatechange = function(){
????????????????????if(xhr.readyState == 4){ if(xhr.status == 200){
????????????????????????// console.log('--');
????????????????????????resolve(JSON.parse(xhr.responseText));
????????????????????}else{ reject(new Error('失敗'));
????????????????}
? ? ? ? ? ? ? }
????????????}
????????})
????}
????????????ajax('GET','http://10.0.157.247:8888/getUserList')
????????????????.then( (data) => { console.log(data); })
????????????????.catch((err) => { console.log(err); })