前端工程師零基礎到就業(視頻代碼齊)階段二

前端工程師零基礎到就業(視頻代碼齊)階段一
前端工程師-01-02-階段二:組件化與移動WebApp開發-第1篇

Promise-初識 Promise
學什麼:javascript

1) Promise 的實例方法前端

(視頻資源vxcmL46679910))
2)Promise 的構造函數方法java


3) Promise 的注意事項和應用數組


Promise 是什麼:
Promise 的基本用法
 then()前端工程師

Promise 的實例方法
catch()異步

 

<body>
    <script>
      // 1.有什麼用
      // then(
      //   data => {},
      //   err => {}
      // );
      // then(data => {});

      // catch 專門用來處理 rejected 狀態
      // catch 本質上是 then 的特例
      // then(null, err => {});

      // 2.基本用法
      new Promise((resolve, reject) => {
        // resolve(123);
        reject('reason');
      })
        .then(data => {
          console.log(data);
        })
        // .then(null, err => {
        //   console.log(err);
        // });
        .catch(err => {
          console.log(err);

          // return undefined;
          throw new Error('reason');
        })
        .then(data => {
          console.log(data);
        })
        .catch(err => {
          console.log(err);
        });

      // catch() 能夠捕獲它前面的錯誤
      // 通常老是建議,Promise 對象後面要跟 catch 方法,這樣能夠處理 Promise 內部發生的錯誤
    </script>
  </body>


finally()ide

<body>
    <script>
      // 1.何時執行
      // 當 Promise 狀態發生變化時,不論如何變化都會執行,不變化不執行
      // new Promise((resolve, reject) => {
      //   // resolve(123);
      //   reject('reason');
      // })
      //   .finally(data => {
      //     console.log(data);
      //   })
      //   .catch(err => {});

      // 2.本質
      // finally() 本質上是 then() 的特例

      // new Promise((resolve, reject) => {
      //   // resolve(123);
      //   reject('reason');
      // })
      //   .finally(data => {
      //     console.log(data);
      //   })
      //   .catch(err => {});
      // 等同於
      new Promise((resolve, reject) => {
        // resolve(123);
        reject('reason');
      })
        .then(
          result => {
            return result;
          },
          err => {
            return new Promise((resolve, reject) => {
              reject(err);
            });
          }
        )
        .then(data => {
          console.log(data);
        })
        .catch(err => {
          console.log(err);
        });
    </script>
  </body>


Promise.resolve()函數

Promise 的構(視頻資源vx(cmL46679910))造函數方法組件化

Promise.reject()url

Promise.all()

<body>
    <script>
      // 1.有什麼用
      // Promise.all() 關注多個 Promise 對象的狀態變化
      // 傳入多個 Promise 實例,包裝成一個新的 Promise 實例返回

      // 2.基本用法
      const delay = ms => {
        return new Promise(resolve => {
          setTimeout(resolve, ms);
        });
      };

      const p1 = delay(1000).then(() => {
        console.log('p1 完成了');

        // return 'p1';
        return Promise.reject('reason');
      });
      const p2 = delay(2000).then(() => {
        console.log('p2 完成了');

        return 'p2';
        // return Promise.reject('reason');
      });

      // Promise.all() 的狀態變化與全部傳入的 Promise 實例對象狀態有關
      // 全部狀態都變成 resolved,最終的狀態纔會變成 resolved
      // 只要有一個變成 rejected,最終的狀態就變成 rejected

      const p = Promise.all([p1, p2]);
      p.then(
        data => {
          console.log(data);
        },
        err => {
          console.log(err);
        }
      );
    </script>


 Promise.race()


 Promise.allSettled()


Promise 的注意事項


Promise 的注意視頻資源vxcmL46679910))事項和應用


三、Promise 的注意事項和應用


resolve 或 reject 執行後的代碼

   

<script>
      // 異步加載圖片
      const loadImgAsync = url => {
        return new Promise((resolve, reject) => {
          const img = new Image();

          img.onload = () => {
            resolve(img);
          };

          img.onerror = () => {
            reject(new Error(`Could not load image at ${url}`));
          };

          img.src = url;
        });
      };

      const imgDOM = document.getElementById('img');
      loadImgAsync('https://2img.mukewang.com/5f057a6a0001f4f918720764.jpg')
        .then(img => {
          console.log(img.src);
          setTimeout(() => {
            imgDOM.src = img.src;
          }, 1000);
        })
        .catch(err => {
          console.log(err);
        });
    </script>
Promise.all/race/allSettled 的參數問題
Promise.all/race/allSettled 的錯誤處理
<body>
    <script>
      // 1.resolve 或 reject 函數執行後的代碼
      // 推薦在調用 resolve 或 reject 函數的時候加上 return,再也不執行它們後面的代碼
      // new Promise((resolve, reject) => {
      //   // return resolve(123);
      //   return reject('reason');

      //   console.log('hi');
      // });

      // 2.Promise.all/race/allSettled 的參數問題
      // 參數若是不是 Promise 數組,會將不是 Promise 的數組元素轉變成 Promise 對象
      // Promise.all([1, 2, 3]).then(datas => {
      //   console.log(datas);
      // });
      // 等價於
      // Promise.all([
      //   Promise.resolve(1),
      //   Promise.resolve(2),
      //   Promise.resolve(3)
      // ]).then(datas => {
      //   console.log(datas);
      // });

      // 不僅是數組,任何可遍歷的均可以做爲參數
      // 數組、字符串、Set、Map、NodeList、arguments
      // Promise.all(new Set([1, 2, 3])).then(datas => {
      //   console.log(datas);
      // });

      // 3.Promise.all/race/allSettled 的錯誤處理
      const delay = ms => {
        return new Promise(resolve => {
          setTimeout(resolve, ms);
        });
      };

      const p1 = delay(1000).then(() => {
        console.log('p1 完成了');

        // return 'p1';
        return Promise.reject('reason');
      });
      // .catch(err => {
      //   console.log('p1', err);
      // });
      const p2 = delay(2000).then(() => {
        console.log('p2 完成了');

        return 'p2';
        // return Promise.reject('reason');
      });
      // // .catch(err => {
      // //   console.log('p2', err);
      // });

      const allPromise = Promise.all([p1, p2]);
      allPromise
        .then(datas => {
          console.log(datas);
        })
        .catch(err => console.log(err));

      // 錯誤既能夠單獨處理,也能夠統一處理
      // 一旦被處理,就不會在其餘地方再處理一遍
    </script>
相關文章
相關標籤/搜索