iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Modern Web

Web互動式網頁系列 第 24

DAY24 JavaScript異步編程

  • 分享至 

  • xImage
  •  

允許處理非同步的操作,像是網絡請求、事件處理和計時器,建立更加響應性和效能的網頁應用程序並提高用戶體驗。
來介紹異步編程的基本概念、回調函數和Promise吧!

為何需要非同步編程?

JS一次只能執行一個任務的單線程(single-threaded)語言,如果要處理長時間運行的任務
像是下載大文件或等待使用者輸入東西時,若阻止主線程會導致網頁凍結讓用戶體驗不佳,所以就有了異步編程。

回調函數

JS中處理異步操作的常見方式,可以將它們作為參數傳遞給其他函數並在異步操作完成後調用。

範例:
fetchData 函數模擬異步操作(例如網絡請求),當操作完成時調用傳遞給它的回調函數 displayData 並傳遞數據。

function fetchData(callback) {
  // 模擬網絡請求
  setTimeout(function () {
    const data = '這是從伺服器獲取的數據';
    callback(data);
  }, 1000); // 模擬1秒的延遲
}

function displayData(data) {
  console.log(data);
}

fetchData(displayData);

Promise

是一個容易管理的異步編程概念。表示一個異步操作的最終完成(或失敗)並提供了更多控制異步流程的選項。

例如:
fetchData 返回一個Promise對象,代表了異步操作的結果。
使用 .then 方法來處理成功的情況並使用 .catch 方法來處理錯誤的情況。

function fetchData() {
  return new Promise(function (resolve, reject) {
    // 模擬網絡請求
    setTimeout(function () {
      const data = '這是從伺服器獲取的數據';
      resolve(data); // 操作成功
      // 或者使用 reject(data) 表示操作失敗
    }, 1000); // 模擬1秒的延遲
  });
}

fetchData()
    //處理成功的情況
  .then(function (data) {
    console.log(data);
  })
    //處理錯誤的情況
  .catch(function (error) {
    console.error(error);
  });

今天介紹到這邊,感謝觀看!


上一篇
DAY23 JavaScript & DOM操作
下一篇
DAY25 JavaScript錯誤處理
系列文
Web互動式網頁30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言