iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0

講Promise之前我們必須先了解同步與異步。
同步vs異步:
同步(Synchronous)和異步(Asynchronous)是兩種不同的程式執行方式。

  • 同步指的是按照順序一行一行地執行程式碼,每行程式碼的執行必須等待前一行程式碼完成。
  • 異步則是在執行程式碼時不需要等待前一行程式碼完成,可以同時執行多個任務,並使用回調或Promise等機制處理結果。

Promise 是現代 JavaScript 中異步編程的基礎。Promise 是一個由asynchronous function所retumn的物件,主要功能是,Promise 會代理一個建立時不用預先得知結果的值。

Promise物件有三種可能的狀態:

  1. 擱置 (pending):初始狀態,不是fulfilled或rejected。
  2. 實現 (fulfilled):表示操作成功完成。
  3. 拒絕 (rejected):表示操作失敗。

當一個Promise處於擱置狀態時,在一段時間內可以變成fulfilled或rejected狀態。當這種轉換發生時,透過then方法繫結的回調(callback)將被調用。

有點抽象對吧,我們就用例子說明吧:

let fetchPromise = fetch("https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json"
); //會向這個URL發出請求,而fetchPromise會是一個Promise物件


console.log(fetchPromise); //在這邊會先得到Pending的狀態


fetchPromise.then((response) => { //使用.then()就可以得到它Fulfilled時回傳的物件
  console.log(response); 
});

我們可以改成這樣來看裡面的data是什麼

fetchPromise
  .then((response) => {
     //這邊用.json()讓這個Promise物件轉換為JavaScript的Object,以便我們查看資料
    return response.json(); //如果直接print這個,會出現Pending的狀態,所以要再串一個.then(),等它變成Fulfilled狀態


  })
  .then((data) => { //這邊的data就會是response轉為json後的資料
    console.log(data);
  }).catch(e =>{ console.log(e)}); //最後用.catch來處理錯誤


上一篇
day9 - JavaScript 物件介紹
下一篇
day11 - Async 跟 Await
系列文
一起進入網頁後端的世界吧 Restful Api 啟動 !30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言