//……關於promise

什麼是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 );
} )
相關文章
相關標籤/搜索