es6的promiss

  1. promise是什麼?
    promise表示一個異步操作結果的佔位符,表示未來的一個結果。

  2. promise的生命週期

    1. pending 進行中,此時操作尚未完成,完成後會進入Fulfilled(成功完成)或者Rejected(程序錯誤)。成功完成之後,會進入settled狀態。promise的then方法可以對完成的結果進行處理。
      	let promise = new Promise((resolve,reject)=>{
             setTimeout(()=>resolve(10),2000)
         });
          promise.then(data=>console.log(data),err=>console.log(err)) // 2s後輸出10
      
  3. 創建一個已完成的promise。

     let resolvedPromise = Promise.resolve('resolved promise');
     resolvedPromise.then(data=>console.log(data),err=>console.log(err)); //立即輸出 resolved promise
     let rejectedPromise = Promise.reject('err');
     rejectedPromise.then(data=>console.log(data),err=>console.log(err));// 立即輸出err
    
  4. 通過thenable創建promise

    let thenablePromise = Promise.resolve({then:(resolve,reject)=>resolve('thenable resolve')});
    thenablePromise.then(data=>console.log(data)) // 立即輸出then...
    
  5. catch

    	     let promiseExc = new Promise((resolve,reject)=>{
                setTimeout(()=>{try{throw new Error('some error')}catch(e){reject(e)}},2000)
            });
            promiseExc.catch(e=>console.log(e)) // Error: some error
    
  6. Promise.all(promises) ;響應多個promise

  7. Promise.race();監聽多個promise,當其中一個完成時就相應。

  8. 用promise封裝一個簡單的ajax。

    function HttpClient() {
    
        this.get = function (url) {
            return new Promise((resolve, reject) => {
                    var request = new XMLHttpRequest();
                    request.open('get', url);
                    request.send();
                    request.onreadystatechange = function () {
                        request.readyState == 4 &&(request.status == '200' ? resolve(request.response) : reject(request.response));
                    }
                }
            )
        }
    }
    
    var http = new HttpClient();
    
    http.get("http://t.weather.sojson.com/api/weather/city/101030100").then(it => {
        console.log(it);
        http.get("http://t.weather.sojson.com/api/weather/city/101030100").then(it => {
            console.log(it)
        }).catch(err=>console.log(err))
    }).catch(err=>console.log(err))
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章