什麼是promise?html
promise 翻譯成中文的意思是 "承諾" ,一個承諾說出去了說明他是進行中的,承諾兌現了表明成功,沒有兌現表明失敗了。ajax
promise 對象的狀態一旦發生改變,就不可逆json
promise有三個狀態:promise
pending 進行中服務器
resolved 成功 成功後執行 promise 的 then() 方法的第一個參數,第二個參數是指失敗後執行的參數異步
rejected 失敗 失敗後還能夠執行 promise 的 catch() 方法的參數函數
大白話:假期我承諾 「不打遊戲」 ,這個承諾就是 pending 狀態。假期後沒打遊戲,就表明這個承諾成功了,就是 resolve 狀態,能夠給本身一個獎勵,這個獎勵用 then() 方法執行,反之就是失敗了,就是 rejected 狀態,給本身一個懲罰,這個懲罰就是 catch() 方法。url
promise 是一個用來解決異步問題的構造函數。spa
解決定時器的異步,使定時器同步執行翻譯
function fn(){ var pro = new Promise( function(succ,failed){ setTimeout( function(){ console.log( 1 ); succ(); } , 1000) } ) return pro; }
var promise = fn(); promise.then( function(){ console.log( 2 ) } )
解決 ajax 的異步,使其同步執行
//ajax封裝 使用promise對象 function ajaxPromise(url){ var pro = new Promise(function(succ,failed){ var ajax = new XMLHttpRequest(); ajax.open( "get" , url ); ajax.send(); ajax.onreadystatechange = function(){ if( ajax.readyState == 4 && ajax.status == 200 ){ //成功了 ajax.responseText succ(ajax.responseText);//通知promise對象ajax請求服務器的數據成功了 } } //承諾多久後若是沒有通知promise對象成功 就通知失敗 setTimeout( function(){ failed("請求服務器失敗"); },5000 ) }) return pro; } var pro = ajaxPromise("../data.json"); pro.then( function(msg){ alert( msg ); },function(msg){ alert( msg ); } )