ES學習Promise對象(九)

這里寫目錄標題

  • 一、概念
  • 二、示例
    • 基本使用
    • 使用 Promise 對象封裝Ajax
    • then() 方法
    • catch() 方法

一、概念

  • 簡單說就是一個容器,里面保存著某個未來才會結束的事件(通常是一個異步操作)的結果。
  • Promise 是一個對象,Promise 提供統一的 API,各種異步操作都可以用同樣的方法進行處理。axios 的內部實現原理就是通過 Promise 實現的。
  • Promise對象有以下兩個特點:
    • 對象的狀態不受外界影響。有三種狀態:pending(進行中)、fulfilled(成功)和rejected(失敗)。只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。
    • 一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise對象的狀態改變,只有兩種可能:從pending變為resolved和從pending變為rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果。
  • Promise對象是一個構造函數,用來生成Promise實例,帶有一個回調函數,回調函數的兩個參數是 resolve(成功) 和 reject(失敗),這兩個參數他們也是函數。

二、示例

基本使用

        function timeOut(ms) {// Promise對象是一個構造函數,用來生成Promise實例// 閉包函數:一個函數里面返回一個函數return new Promise((resolve, reject) => {// ... 模擬執行異步操作,后端返回的數據let res = {code: 200,//code:201data: {name: 'ES6學習!'},error: '失敗了!'}setTimeout(() => {// 異步執行成功if (res.code === 200) {resolve(res.data);// 異步執行失敗} else {reject(res.error);}},ms);});}// then方法的第一個參數是resolved狀態的回調函數,// 第二個參數是rejected狀態的回調函數,它們都是可選的。timeOut(4000).then((val)=>{console.log(val); //這里的值接收的是 resolved() 的值},(err)=>{console.log(err);//這里的值接收的是 rejected() 的值,輸出 失敗了});

Promise構造函數接受一個函數作為參數,該函數的兩個參數分別是resolve和reject。它們是兩個函數,由JavaScript引擎提供,不用自己部署。
resolve函數的作用是,將Promise對象的狀態從“未完成”變成“成功”(即從pending變為resolved),在異步操作成功時調用,并將異步操作的結果作為參數傳遞。
reject函數的作用是,將Promise對象的狀態從“未完成”變為“失敗”(即從pending變為rejected),在異步操作失敗時嗲用,并將異步操作報出的錯位u傳遞出去。
Promise 實例生成以后,可以用 then方法分別指定resolved狀態和 rejected狀態的回調函數。

使用 Promise 對象封裝Ajax

        const getJson = function (url) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest();xhr.open('GET', url);xhr.resposeType = 'json';xhr.setRequestHeader('Accept', 'application/json');xhr.send();xhr.onreadystatechange = function() {//console.log("READYSTATE"+ xhr.readyState);if (xhr.readyState === 4) {  console.log("READYSTATE"+ xhr.status);             if (xhr.status === 200) { resolve(this.responseText);} else {reject(new Error(xhr.statusText))}}}})}getJson('http://timor.tech/api/holiday/year/2024').then((data) => {console.log(data);}, (error) => {console.log(error);})

then() 方法

如果一個promise執行完后 返回的還是一個promise 實例(注意,不是原來那個Promise實例),會把這個promise 的執行結果,傳遞給下一次then中。因此可以采用鏈式寫法,即then方法后面再調用另一個then方法。

catch() 方法

catch(err=>{})方法等價于then(null,err=>{}),用于指定發生錯誤時的回調函數

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

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

相關文章

Kibana:LINUX_X86_64 和 DEB_X86_64兩種可選下載方式的區別

最近需要在vm(操作系統是 Ubuntu 22.04.4 LTS,代號 Jammy。這是一個基于 x86_64 架構的 Linux 發行版)上安裝一個7.17.8版本的Kibana,并且不采用docker方式。 在下載的時候發現有以下兩個選項,分別是 LINUX_X86_64 和 …

CMake 構建項目并整理頭文件和庫文件

本文將介紹如何使用 CMake 構建項目、編譯生成庫文件,并將頭文件和庫文件整理到統一的目錄中以便在其他項目中使用。 1. 項目結構 假設我們正在構建一個名為 rttr 的開源庫,初始的項目結構如下: D:\WorkCode\Demo\rttr-master\|- src\ …

【FAQ】HarmonyOS SDK 閉源開放能力 — Vision Kit(2)

1.問題描述: 人臉活體檢測返回上一頁App由沉浸式變為非沉浸式多了上下安全區域。 解決方案: 檢測結束后需要自己去設置沉浸式配置。 2.問題描述: Vision Kit文字識別是本地識別,還是上傳至服務器,由服務器來識別文…

AIA - IMSIC之二(附IMSIC處理流程圖)

本文屬于《 RISC-V指令集基礎系列教程》之一,歡迎查看其它文章。 1 ???????通過IMSIC接收外部中斷的CSR 軟件通過《AIA - 新增的CSR》描述的CSR來訪問IMSIC。 machine level 的 CSR 與 IMSIC 的 machine level interrupt file 可相互互動;而 supervisor level 的 CSR…

Vue單頁應用的配置

前面通過幾篇文章了解并掌握了 Vue 項目構建及運行的前期工作 。接下來我們可以走進 Vue 項目的內部,一探其內部配置的基本構成。 1. 路由配置 由于 Vue 這類型的框架都是以一個或多個單頁構成,在單頁內部跳轉并不會重新渲染 HTML 文件,其路…

CocosCreator-引擎案例-TS:spine

工程1:LoadSpine:簡單加載spine資源 建立工程,在層級上建立一個空對象,改名spine 在spine上添加spine組件: 添加組件>渲染組件>spine 在spine上掛上腳本loadspine onLoad () {cc.resources.load(loadSpine/ali…

使用FreeNAS軟件部署ISCSI的SAN架構存儲(IP-SAN)練習題

一,實驗用到工具分別為: VMware虛擬機,安裝教程:VMware Workstation Pro 17 安裝圖文教程 FreeNAS系統,安裝教程:FreeNAS-11.2-U4.1安裝教程2024(圖文教程) 二,新建虛…

【ANGULAR網站開發】初始環境搭建

1. 初始化angular項目 1.1 創建angular項目 需要安裝npm和nodejs,這邊不在重新安裝 直接安裝最新版本的angular npm install -g angular/cli安裝指定大版本的angular npm install -g angular/cli181.2 啟動angular 使用idea啟動 控制臺啟動 ng serve啟動成功…

lua debug相關方法詳解

lua debug相關方法詳解 1. debug.debug()2. debug.getinfo(func | level [, what])3. debug.getlocal(func-or-level, localindex)4. debug.setlocal(level, local_number, value)5. debug.getupvalue(func, upvalue_index)6. debug.setupvalue(func, upvalue_index, value)7. …

《計算機網絡(第7版)-謝希仁》期末考試復習題和答案(總結整理)

目錄 前言: 一、選擇題。 二、填空題。 三、名詞解釋。 四、簡答題。 前言: 這個自動標題自己帶了序號,一開始想全部選項和題號都改過來的,結果一看一百多個全是,懶得改了 一、選擇題。 1、廣域網覆蓋的地理范圍…

【再談設計模式】享元模式~對象共享的優化妙手

一、引言 在軟件開發過程中,我們常常面臨著創建大量細粒度對象的情況,這可能會導致內存占用過高、性能下降等問題。享元模式(Flyweight Pattern)就像是一位空間管理大師,它能夠在不影響功能的前提下,有效地…

Milvus×EasyAi:如何用java從零搭建人臉識別應用

如何從零搭建一個人臉識別應用?不妨試試原生Java人工智能算法:EasyAi Milvus 的組合拳。 本文將使用到的軟件和工具包括: EasyAi:人臉特征向量提取Milvus:向量數據庫用于高效存儲和檢索數據。 01. EasyAi:…

NS3學習——tcpVegas算法代碼詳解(2)

NS3學習——tcpVegas算法代碼詳解(1)-CSDN博客 目錄 4.TcpVegas類中成員函數 (5) CongestionStateSet函數 (6) IncreaseWindow函數 1.檢查是否啟用 Vgas 2.判斷是否完成了一個“Vegas 周期” 2.1--if:判斷RTT樣本數量是否足夠 2.2--e…

GitLab 將停止為中國區用戶提供服務,60天遷移期如何應對? | LeetTalk Daily

“LeetTalk Daily”,每日科技前沿,由LeetTools AI精心篩選,為您帶來最新鮮、最具洞察力的科技新聞。 GitLab作為一個廣受歡迎的開源代碼托管平臺,近期宣布將停止服務中國大陸、澳門和香港地區的用戶提供服務。根據官方通知&#x…

華為實訓課筆記 2024 1223-1224

華為實訓 12/2312/24 12/23 [Huawei]stp enable --開啟STP display stp brief --查詢STP MSTID Port Role STP State Protection 實例ID 端口 端口角色 端口狀態 是否開啟保護[Huawei]display stp vlan xxxx --查詢制定vlan的生成樹計算結…

企業數字化轉型中如何區分“IT投入”和“業務投入”

在數字化轉型的浪潮中,企業往往面臨一個關鍵問題:如何區分“IT投入”和“業務投入”?在很多企業中,這兩個概念往往被混淆,不少公司甚至認為“數字化轉型”就是“IT的事情”,但實際上,它們之間有…

【Spring AI】Spring AI Alibaba的簡單使用

提示:文章最后有詳細的參考文檔。 前提條件 SpringBoot版本為3.x以上JDK為17以上申請api-key,地址:百煉平臺 引入依賴 說明:我的springboot版本為3.2.4,spring-ai-alibaba-starter版本為1.0.0-M2.1(對應spring-ai版本…

《Java源力物語》-3.空值獵手

~犬📰余~ “我欲賤而貴,愚而智,貧而富,可乎? 曰:其唯學乎” \quad 夜色漸深,在一處偏僻小徑上,月光透過濃密的源力云層,在地面上投下斑駁的光影。String正獨自練習著剛從…

科技云報到:人工智能時代“三大件”:生成式AI、數據、云服務

科技云報到原創。 就像自行車、手表和縫紉機是工業時代的“三大件”。生成式AI、數據、云服務正在成為智能時代的“新三大件”。加之全球人工智能新基建加速建設,成為了人類社會數字化遷徙的助推劑,讓新三大件之間的耦合越來越緊密。從物理世界到數字世…

hiprint結合vue2項目實現靜默打印詳細使用步驟

代碼地址是:vue-plugin-hiprint: hiprint for Vue2/Vue3 ?打印、打印設計、可視化設計器、報表設計、元素編輯、可視化打印編輯 本地安裝包地址:electron-hiprint 發行版 - Gitee.com 1、先安裝hipint安裝包在本地 2、項目運行npm(socket.…