Promise的then/catch方法詳解

一、基本概念與用法

Promise 是非同步編程的一種解決方案,它是一個對象,可以處理非同步任務的狀態(pending/fulfilled/rejected)及其對應的結果。在使用 Promise 進行非同步編程時,我們通常通過調用它的 then 方法來獲取其狀態改變時的結果,並通過 catch 方法捕獲非同步任務拋出的異常。Promise 的典型用法如下:


var promise = new Promise(function(resolve, reject) {
  // 非同步任務...
  if (/* 非同步操作成功 */) {
    resolve(result);
  } else {
    reject(error);
  }
});

promise.then(function(result) {
  // 非同步操作成功時的回調
}).catch(function(error) {
  // 非同步操作失敗時的回調
});

Promise 的構造函數傳入一個回調函數,該回調函數中包含非同步操作的三個狀態之一:成功、失敗、未完成。由於非同步任務的執行時間不確定,我們無法確定 Promise 對象何時變為成功或失敗狀態,因此需要通過 then/catch 方法來獲取其狀態。

二、then 方法詳解

1、then 方法的基本用法

then 方法接收兩個回調函數作為參數,分別用來處理非同步任務成功時和失敗時的情況。如果 Promise 對象的狀態變為成功,則調用第一個回調函數;如果 Promise 對象的狀態變為失敗,則調用第二個回調函數。then 方法的基本用法如下:


promise.then(function(result) {
  // 非同步操作成功時的回調
}, function(error) {
  // 非同步操作失敗時的回調
});

以下是通過 then 方法的基本用法來實現非同步任務的代碼示例:


var promise = new Promise(function(resolve, reject) {
  // 非同步任務...
  if (/* 非同步操作成功 */) {
    resolve(result);
  } else {
    reject(error);
  }
});

promise.then(function(result) {
  // 非同步操作成功時的回調
  console.log(result);
}, function(error) {
  // 非同步操作失敗時的回調
  console.log(error);
});

2、then 方法的鏈式調用

then 方法不僅可以在一個 Promise 對象上執行一次,也可以鏈式調用多個 then 方法,按順序處理多個非同步任務的結果。鏈式調用的原理是將 then 的返回值轉變為一個新的 Promise 對象,該 Promise 對象的狀態與 then 方法的返回值有關。如果 then 方法內返回的是一個 Promise 對象,則鏈式調用後面的 then 方法會等待它的狀態改變。如果 then 方法內返回的是一個非 Promise 對象的值,則鏈式調用後面的 then 方法會立即執行,並且其參數接收的就是這個非 Promise 對象的值。鏈式調用的基本用法如下:


promise.then(function(result) {
  // 非同步操作成功時的回調
  return result1; // 注意這裡返回值是一個非 Promise 對象的值
}).then(function(result1) {
  // result1 是 then 方法中返回的值
}).catch(function(error) {
  // 非同步操作失敗時的回調
});

以下是通過 then 方法的鏈式調用來實現多個非同步任務依次執行的代碼示例:


var promise = new Promise(function(resolve, reject) {
  // 非同步任務...
  if (/* 非同步操作成功 */) {
    resolve(result);
  } else {
    reject(error);
  }
});

promise.then(function(result) {
  // 非同步操作成功時的回調
  return result1;
}).then(function(result1) {
  // result1 是 then 方法中返回的值
  return result2;
}).then(function(result2) {
  // result2 是 then 方法中返回的值
}).catch(function(error) {
  // 非同步操作失敗時的回調
});

三、catch 方法詳解

在鏈式調用多個 then 方法時,如果其中某個 then 方法拋出異常,則 promise 對象會立即調用 catch 方法中的回調函數。catch 方法的主要作用是捕獲鏈式調用中的異常並進行處理,以保證 Promise 對象最終都會被處理,不會出現 uncaught exception 或 promise 中斷的情況。catch 方法的基本用法如下:


promise.catch(function(error) {
  // 非同步操作失敗時的回調
});

以下是通過 catch 方法來處理錯誤的代碼示例:


var promise = new Promise(function(resolve, reject) {
  // 非同步任務...
  if (/* 非同步操作成功 */) {
    resolve(result);
  } else {
    reject(error);
  }
});

promise.then(function(result) {
  // 非同步操作成功時的回調
  return result1;
}).then(function(result1) {
  // result1 是 then 方法中返回的值
  return result2;
}).then(function(result2) {
  // result2 是 then 方法中返回的值
}).catch(function(error) {
  // 捕獲鏈式調用中的異常並進行處理
});

四、小結

通過以上的介紹,我們可以看出,Promise 對象以其簡單的 API 和強大的功能在非同步編程中發揮著重要的作用。通過 then 方法的鏈式調用,我們可以方便地依次處理多個非同步任務的結果,而 catch 方法則可以保證 Promise 對象在出現異常時不會中斷程序運行,而是進行錯誤處理。同時,我們應該注意 Promise 對象中包含的非同步操作必須是非阻塞的,否則無法發揮其真正的非同步特性。

原創文章,作者:SGWG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137666.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SGWG的頭像SGWG
上一篇 2024-10-04 00:17
下一篇 2024-10-04 00:17

相關推薦

  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • 用法介紹Python集合update方法

    Python集合(set)update()方法是Python的一種集合操作方法,用於將多個集合合併為一個集合。本篇文章將從以下幾個方面進行詳細闡述: 一、參數的含義和用法 Pyth…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟體。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29

發表回復

登錄後才能評論