關於promise的理解

看了一些技術博客但是感覺太過於抽象難懂,所以自己搞一個。

回調地獄

https://www.cnblogs.com/suihang/p/9595548.html

如連接文章所示的回調地獄例子

//假設有五個計時器,在第一個計時器執行完後執行第二個,第二個執行完畢後執行第三個,以此類推 
huidiaodiyu(){
        setTimeout(function(){
          console.log('第一個計時器');
            setTimeout(function(){
              console.log('第二個計時器');
                setTimeout(function(){
                  console.log('第三個計時器');
                    setTimeout(function(){
                      console.log('第四個計時器');
                    },200)
                },200)
            },200)
        },200)
}

例子中的四個計時器是相互獨立(異步操作),如果要實現同步,則需要嵌套方法,等待上一個條件完成後才能進行下一個操作。

promise的存在就是爲了解決回調地獄的問題

Promise

Promise有三種狀態:pending/reslove/reject 。pending就是未決,resolve可以理解爲成功,reject可以理解爲拒絕。

創建一個promise:

const promise = new Promise((resolve, reject) => {
    // do something here ...
    if (success) {
        resolve(value); // value爲執行成功後傳遞到then的值
    } else {
        reject(error); // rejected
    }
});

通過then方法,分別指定resolved狀態和rejected狀態的回調函數。

promise.then(function(value) {
      // success
  }, function(error) {
      // failure
});

promise的方法

1.promise.all()

一個腳本中有多個promise時,監控多個Promise對象執行完成

promiseTest(){
      var p1 = Promise.resolve(3);
      var p2 = 1337;
      var p3 = new Promise((resolve,reject) => {
        setTimeout(resolve,100,'foo')
      });

      Promise.all([p1,p2,p3]).then(values => {
        console.log(values);
      }).catch(err => {
   //如果p1/p2/p3有任一返回失敗時,那麼整體立即返回失敗,返回的錯誤信息是第一個失敗的promise結果
        console.log(err);
      });
}

打印結果:

其中p1,p3的數據類型是object promise,p2是1337,Promise.all([p1,p2,p3]):把promise打包,扔到一個數組裏面,打包完還是一個promise對象.最後必須確保所有promise對象都是resolve狀態

2.promise.race()

與all的不同之處在於,只要有一個是resolve狀態就可以返回

3.promise.resolve()

將現有的東西,轉成一個Promise對象,且是resolve成功狀態

4.Promise.reject()

將現有的東西,轉成一個Promise對象,且是reject失敗狀態

傳入的參數會原封不動的作爲 reject 函數的理由,並不會因爲傳入的參數 Promise 或者是 thenable 對象而有所不同

 

 

 

 

 

 

 

 

發佈了15 篇原創文章 · 獲贊 7 · 訪問量 1903
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章