promise對象總結


一.Promise是異步編程的一種解決方案,它是一個容器,里面保存着某個未來才會結束的事件(通常是一個異步操作)的結果。從語法上說,Promise 是一個對象,從它可以獲取異步操作的消息。Promise 提供統一的 API,各種異步操作都可以用同樣的方法進行處理。promise對象是一個構造函數,用來生成Promise實例;

二.promise的兩個特點    對象狀態不受外界影響 && 一旦狀態改變,就不會再變,任何時候都可以得到結果(pending狀態-->fulfilled || pending-->rejected)

基本用法  函數作為參數,該函數兩個參數resolve和reject

const promise = new Promise(function(resolve,reject) {
  ...
  if(/*異步操作成功*/){
    resolve(value)
  }else{
    reject(error)
  }
})

三.Promise方法

  1.promise.prototype.then():Promise 實例添加狀態改變時的回調函數,有兩個參數resolve和reject的分別操作

  一般來說,調用resolvereject以后,Promise 的使命就完成了,后繼操作應該放到then方法里面,而不應該直接寫在resolvereject的后面。所以,最好在它們前面加上return語句,這樣就不會有意外。

new Promise((resolve, reject) => {
  return resolve()
  //后面語句不會執行
  console.log('dd')
})

  2.promise.prorotype.catch():是.then(null, rejection)的別名,用於指定發生錯誤時的回調函數。

getJSON('/posts.json').then(function(posts) {
  // ...
}).catch(function(error) {
  // 處理 getJSON 和 前一個回調函數運行時發生的錯誤
  console.log('發生錯誤!', error);
});

建議總是使用catch方法,而不使用then方法的第二個參數

// bad
promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  });

// good
promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });

如果沒有使用catch方法指定錯誤處理的回調函數,Promise 對象拋出的錯誤不會傳遞到外層代碼,即不會有任何反應。一般總是建議,Promise 對象后面要跟catch方法,這樣可以處理 Promise 內部發生的錯誤。catch方法返回的還是一個 Promise 對象,因此后面還可以接着調用then方法。

  3.promise.prototype.finally():用於指定不管 Promise 對象最后狀態如何,都會執行的操作。該方法是 ES2018 引入標准的。

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

  4.promise.all():用於將多個 Promise 實例,包裝成一個新的 Promise 實例。

promises是包含 n 個 Promise 實例,只有這n 個實例的狀態都變成fulfilled,或者其中有一個變為rejected,才會調用Promise.all方法后面的回調函數。

  5.promise.race()同樣是將多個 Promise 實例,包裝成一個新的 Promise 實例。

  6.promise.resolve()將現有對象轉為 Promise 對象,Promise.resolve方法就起到這個作用

  7.promise.reject()也會返回一個新的 Promise 實例,該實例的狀態為rejected

  8.promise.try()

Promise.try(database.users.get({id: userId}))
  .then(...)
  .catch(...)

 參考 https://segmentfault.com/a/1190000010399626  執行順序有介紹

參考 http://web.jobbole.com/91406/    promise原理  實現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM