我不知道的promise

  • promise在resolve以後 再拋出錯誤並不會被捕獲,等於沒有拋出,我的理解是狀態改變以後就不會再次改變。promise

  • 錯誤具備冒泡的特性,會一直向後傳遞,直到被捕獲爲止,可是不會冒泡到全局。跟傳統的try catch 語句不一樣的是,若是沒有使用catch 語句指定錯誤處理的回調函數,promise 對象拋出的錯誤不會傳遞到外層代碼
  • Catch方法返回的仍是一個promise 對象,所以後面還能夠接着調用then方法,若是沒有報錯則跳過該catch 方法,須要注意的是,若是在catch 語句之後再拋出錯誤則沒法捕獲。
  • done 方法老是出於回調鏈的微端,保證拋出任何可能出現的錯誤(向全局)
  • 值穿透:若是在then方法或是catch方法中傳入的不是函數則會穿透,像是沒有傳入。
  • 實現並行,很差的作法是使用forEach遍歷執行promise,能夠使用Promise.all
    getAsyncArr().then(promiseArr => { return promise.all(promiseArr); }) .then(res => console.log(res))
  • 實現串行執行,那咱們能夠利用reduce來處理串行執行
    var pA = [ function() {return new Promise(resolve => resolve(1))}, function(data) {return new Promise (resolve(1 + data))} ] pA.reduce((prev, next) => prev.then(next).then(res=>res), Promise.resolve()).then(res => console.log(res))函數

相關文章
相關標籤/搜索