Promise的狀態和方法是什么?

?`Promise` 的狀態和方法

?1. `Promise` 的狀態

一個 `Promise` 可以處于以下三種狀態之一:

- Pending(待定):初始狀態,表示異步操作正在進行中,`Promise` 還沒有被解決或拒絕。
- Fulfilled(已完成):操作成功完成,`Promise` 已經 resolved(解決),并返回結果。
- Rejected(已拒絕):操作失敗,`Promise` 已經 rejected(拒絕),并返回錯誤原因。

這三個狀態是 `Promise` 在生命周期中會經歷的狀態,一旦狀態從 Pending 變為 Fulfilled 或 Rejected,它就不能再改變狀態。

?2. `Promise` 的方法

`Promise` 提供了一些常用的方法來處理異步操作的結果。這些方法用于設置 `Promise` 完成時的行為或處理錯誤。

1. `then(onFulfilled, onRejected)`

- `then()` 方法用于指定當 `Promise` 成功時(狀態變為 `Fulfilled`)執行的回調函數,以及當 `Promise` 失敗時(狀態變為 `Rejected`)執行的回調函數。
- `onFulfilled` 是操作成功時的回調,`onRejected` 是操作失敗時的回調。

javascript
promise.then(result => {console.log('操作成功:', result);},error => {console.log('操作失敗:', error);}
);


?

鏈式調用:
- `then()` 返回一個新的 `Promise` 對象,因此可以進行鏈式調用。鏈式調用的返回值會傳遞到下一個 `then()` 中。

javascript
promise.then(result => {return result + ' 繼續執行';}).then(newResult => {console.log(newResult); ?// '繼續執行'}).catch(error => {console.log(error);});


?

?2. `catch(onRejected)`

- `catch()` 方法是專門用來處理 `Promise` 被拒絕(即狀態為 `Rejected`)時的回調。它實際上是 `.then(null, onRejected)` 的簡寫。

javascript
promise.then(result => {console.log(result);}).catch(error => {console.error('操作失敗:', error);});


?

?3. `finally(onFinally)`

- `finally()` 方法用于在 `Promise` 執行完畢后,無論成功還是失敗,都會執行 `onFinally` 回調函數。`finally` 返回的 `Promise` 對象會繼承原 `Promise` 的狀態。

javascript
promise.then(result => {console.log('成功:', result);}).catch(error => {console.log('失敗:', error);}).finally(() => {console.log('無論成功或失敗都會執行');});


?

?4. `Promise.resolve(value)`

- `Promise.resolve(value)` 方法返回一個已經 `fulfilled` 狀態的 `Promise`,并且返回 `value` 作為結果。
- 如果傳入的是一個 `Promise` 對象,則返回該 `Promise` 對象。

javascript
let resolvedPromise = Promise.resolve('成功');
resolvedPromise.then(result => {console.log(result); ?// '成功'
});


?

5. `Promise.reject(reason)`

- `Promise.reject(reason)` 方法返回一個已經 `rejected` 狀態的 `Promise`,并且返回 `reason` 作為拒絕的原因。

javascript
let rejectedPromise = Promise.reject('失敗');
rejectedPromise.catch(error => {console.log(error); ?// '失敗'
});

6. `Promise.all(iterable)`

- `Promise.all()` 方法接收一個可迭代對象(例如數組),并返回一個新的 `Promise`。該 `Promise` 會等到所有的 `Promise` 都完成時才會被 `fulfilled`,或者當其中一個 `Promise` 被 `rejected` 時就被 `rejected`。
- 該方法適用于需要并行執行多個異步操作,并等待它們全部完成的場景。

javascript
let promise1 = Promise.resolve(1);
let promise2 = Promise.resolve(2);
let promise3 = Promise.resolve(3);Promise.all([promise1, promise2, promise3]).then(results => {console.log(results); ?// [1, 2, 3]}).catch(error => {console.error(error);});


?

?7. `Promise.race(iterable)`

- `Promise.race()` 方法接收一個可迭代對象(例如數組),并返回一個新的 `Promise`。該 `Promise` 在第一個 `Promise` 完成(無論是 `fulfilled` 還是 `rejected`)時就會結束,不再等待其他 `Promise` 完成。

javascript
let promise1 = new Promise(resolve => setTimeout(resolve, 100, 'A'));
let promise2 = new Promise(resolve => setTimeout(resolve, 200, 'B'));Promise.race([promise1, promise2]).then(result => {console.log(result); ?// 'A' (第一個完成的 Promise)});


?

?3. 總結

- `then()`:用于處理成功和失敗的回調,支持鏈式調用。
- `catch()`:用于處理 `Promise` 被拒絕時的回調,簡化錯誤處理。
- `finally()`:無論成功或失敗都執行的回調,用于執行清理操作。
- `Promise.resolve()`:用于返回一個已解決的 `Promise`。
- `Promise.reject()`:用于返回一個已拒絕的 `Promise`。
- `Promise.all()`:用于并行執行多個異步操作,所有操作完成后才會返回。
- `Promise.race()`:用于返回第一個完成的異步操作。

這些方法幫助我們更優雅地處理異步操作,避免回調地獄,并簡化錯誤處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73750.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73750.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows云服務器支持哪些數據庫管理系統?

Windows云服務器因其良好的兼容性和企業級支持,廣泛用于網站托管、企業管理系統、金融應用、數據分析等場景。在這些應用中,數據庫管理系統(DBMS)起著至關重要的作用。Windows 服務器支持多種數據庫,包括關系型數據庫(SQL)和非關系型數據庫(N…

MongoDB 實際工作中應用場景

博主介紹:?全網粉絲5W,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰,博主也曾寫過優秀論文,查重率極低,在這方面有豐富的經驗…

03 相機標定圖像采集

學完本文,您將獲取一下技能: 1:如何提升標定質量,如選擇標定板,標定圖像采集的注意事項, 2:實現標定圖像自動篩選的代碼 3:量產場景如何通過一張圖像來標定相機 為了實現良好的標定效果,以下因素在標定數據采集前必須設置得當。 標定板選擇 標定板尺寸準確材料平…

GitHub美化個人主頁3D圖表顯示配置操作

這個功能主要是用的這個開源倉庫:https://github.com/yoshi389111/github-profile-3d-contrib 想看效果的話,我的個人主頁:https://github.com/Sjj1024 開始操作 1.創建自己的github主頁屬性項目——跟你github用戶名一致即可,…

buu-jarvisoj_fm-好久不見52

格式化字符串漏洞題 x等于4x等于4???????x等于4???????x等于4 可以知道是第11個參數,%11$ 定位到這個位置,然后%n往這個位置寫入4 1.先用pwndbg調試得到偏移量 2.查看獲取x的地址 3.構造ROP鏈,發送連接 from pwn import *# …

AwesomeQt分享3(含源碼)

AwesomeQt 這個項目包含了多個Qt組件的使用示例,旨在展示Qt各種強大功能的實現方式。 源碼分享 github: awesome_Qtgitee: 后續同步 項目進度 QCustomPlot曲線控件示例 支持排序和篩選的列表控件示例 支持排序和篩選的表格控件示例 屬性表示例 Dock窗口示例 自繪…

ubuntu 安裝 g++

文章目錄 前提一、安裝 g1.1 安裝1.2 驗證 前提 安裝 tflite_support 報錯 error: subprocess-exited-with-error RuntimeError: Unsupported compiler -- at least C11 support is needed!一、安裝 g 1.1 安裝 # 安裝編譯工具鏈(如g)和依賴庫 sudo …

【NLP 50、損失函數 KL散度】

目錄 一、定義與公式 1.核心定義 2.數學公式 3.KL散度與交叉熵的關系 二、使用場景 1.生成模型與變分推斷 2.知識蒸餾 3.模型評估與優化 4.信息論與編碼優化 三、原理與特性 1.信息論視角 ?2.優化目標 3.?局限性 四、代碼示例 代碼運行流程 核心代碼解析 抵達夢想靠的不是狂熱…

使用QT畫帶有透明效果的圖

分辨率&#xff1a;24X24 最大圓 代碼: #include <QApplication> #include <QImage> #include <QPainter>int main(int argc, char *argv[]) {QImage image(QSize(24,24),QImage::Format_ARGB32);image.fill(QColor(0,0,0,0));QPainter paint(&image);…

【Unity網絡編程知識】使用Socket實現簡單TCP通訊

1、Socket的常用屬性和方法 創建Socket TCP流套接字 Socket socketTcp new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 1.1 常用屬性 1&#xff09;套接字的連接狀態 socketTcp.Connected 2&#xff09;獲取套接字的類型 socketTcp.So…

青少年編程與數學 02-013 初中數學知識點 02課題、概要

青少年編程與數學 02-013 初中數學知識點 02課題、概要 一、數與代數二、圖形與幾何三、統計與概率四、綜合與實踐五、課程理念與目標 根據2022年版義務教育數學課程標準&#xff0c;初中數學知識點可以總結為以下四大領域。 一、數與代數 數與式 有理數與實數&#xff1a;理解…

深入探索 libarchive

深入探索 libarchive&#xff1a;跨平臺歸檔處理的終極解決方案 一、背景與歷史沿革 1.1 歸檔處理的演進之路 從1979年tar格式的誕生到現代云存儲時代&#xff0c;歸檔技術經歷了四個關鍵階段&#xff1a; Unix時代&#xff1a;tar/cpio主導系統備份互聯網黎明期&#xff1…

2025最新“科研創新與智能化轉型“暨AI智能體開發與大語言模型的本地化部署、優化技術實踐

第一章、智能體(Agent)入門 1、智能體&#xff08;Agent&#xff09;概述&#xff08;什么是智能體&#xff1f;智能體的類型和應用場景、典型的智能體應用&#xff0c;如&#xff1a;Google Data Science Agent等&#xff09; 2、智能體&#xff08;Agent&#xff09;與大語…

Yolo_v8的安裝測試

前言 如何安裝Python版本的Yolo&#xff0c;有一段時間不用了&#xff0c;Yolo的版本也在不斷地發展&#xff0c;所以重新安裝了運行了一下&#xff0c;記錄了下來&#xff0c;供參考。 一、搭建環境 1.1、創建Pycharm工程 首先創建好一個空白的工程&#xff0c;如下圖&…

時尚界正在試圖用AI,創造更多沖擊力

數字藝術正以深度融合的方式&#xff0c;在時尚、游戲、影視等行業實現跨界合作&#xff0c;催生了多樣化的商業模式&#xff0c;為創作者和品牌帶來更多機會&#xff0c;數字藝術更是突破了傳統藝術的限制&#xff0c;以趣味觸達用戶&#xff0c;尤其吸引了年輕一代的消費群體…

藍橋杯省模擬賽 01串個數

問題描述 請問有多少個長度為 24 的 01 串&#xff0c;滿足任意 5 個連續的位置中不超過 3 個位置的值為 1。 所有長度為24的01串組合有2*24種 思路&#xff1a;遍歷所有長度為24的01串組合&#xff0c;選擇出符合題意的 #include<iostream> #include<cmath> us…

【軟考備考】系統架構設計論文完整范文示例

本文由AI輔助創造 題目:基于微服務與云原生的智慧政務平臺架構設計與實踐 摘要(約300字) 本文以某省級智慧政務平臺建設項目為背景,針對傳統政務系統存在的"信息孤島"、擴展性差、維護成本高等問題,提出了一套基于微服務與云原生技術的解決方案。通過領域驅動…

數據庫原理及應用mysql版陳業斌實驗二

&#x1f3dd;?專欄&#xff1a;Mysql_貓咪-9527的博客-CSDN博客 &#x1f305;主頁&#xff1a;貓咪-9527-CSDN博客 “欲窮千里目&#xff0c;更上一層樓。會當凌絕頂&#xff0c;一覽眾山小。” 目錄 實驗二單表查詢 1.實驗數據如下 student 表&#xff08;學生表&#…

SDL —— 將sdl渲染畫面嵌入Qt窗口顯示(附:源碼)

?? SDL/SDL2 相關技術、疑難雜癥文章合集(掌握后可自封大俠 ?_?)(記得收藏,持續更新中…) 效果 使用QWidget加載了SDL的窗口,渲染器使用硬件加速跑GPU的。支持Qt窗口縮放或顯示隱藏均不影響SDL的圖像刷新。 ? 操作步驟 1、在創建C++空工程時加入SDL,引入頭文件時需…

C語言之鏈表增刪查改

1.知識百科 鏈表&#xff08;Linked List&#xff09;是計算機科學中一種基礎的數據結構&#xff0c;通過節點&#xff08;Node&#xff09;的鏈式連接來存儲數據。每個節點包含兩部分&#xff1a;存儲數據的元素和指向下一個節點的指針&#xff08;單鏈表&#xff09;或前后兩…