Promise 的基本使用 與 Ajax的jQuery封裝

Promise 的基本使用

為了解決回調地獄問題,從而給出的解決辦法:

/*** Promise** 1. Promise 是 一個構造函數  new Vue()* 2. Promise() 里面有個參數, 參數就是一個回調 () => {}*    回調也有參數*    resolve f 操作成功的時候調用resolve  => 調用 resolve => then()*    reject  f 操作失敗的時候調用reject* 3. 在 Promise里面放一個異步操作/*** 1. p 什么類型 Promise類型* 2. axios.get() Promise 類型* 3. axios.get().then()* 4. p.then()* xxxx.then() xxxx 大多數就是個promise*/const p = new Promise((resolve, reject) => {console.log('準備開始執行異步操作了')// 舉例 : 來一個異步操作setTimeout(() => {// 假如操作成功了  成功 == resolve == then// resolve('成功了')// 假如操作失敗了  失敗 == reject == catchreject('失敗了')}, 1000)
})p.then(res => {console.log('走then了', res)
}).catch(err => {console.log('走catch了', err)
})// axios.get().then()

讀取多個文件時可以使用:


ml_read('./a.txt').then(res => {console.log('a', res)return ml_read('./b.txt')}).then(res => {console.log('b', res)return ml_read('./c.txt')}).then(res => {console.log('c', res)})

async … await … 的使用

let fs = require('fs')
/*** @name ml_read* @desc 讀取多個文件* @param* @return*/
function ml_read(path) {//1. 創建 promise 實例let p = new Promise((resolve, reject) => {fs.readFile(path, 'utf-8', (err, data) => {if (err) {return reject('錯誤了')}resolve(data)})})//2. 返回 這個 promise 實例return p
}
// **************************** 上面是封裝好的 promise 函數 ml_read  ***********/***  async 和 await 是 es8 提出來的*  作用 : 一種(編寫同步代碼的方式)處理異步的解決方案 , 處理的更加徹底**  async  修飾一個(內部有await)函數   async  function test() { }*  await  修飾一個promise, 等待一個promise的結果       await promise類型*/async function test() {// then 其實就是等待一個結果(res)// ml_read('./a.txt').then(res => {//    console.log(res)// })// await 其實也是等待一個結果(res)let resa = await ml_read('./a.txt')console.log(resa)let resb = await ml_read('./b.txt')console.log(resb)let resc = await ml_read('./c.txt')console.log(resc)
}test()/***  使用了*  需求 : a => b => c*/
// ml_read('./a.txt')
//   .then(res => {
//     console.log('a', res)
//     return ml_read('./b.txt')
//   })
//   .then(res => {
//     console.log('b', res)
//     return ml_read('./c.txt')
//   })
//   .then(res => {
//     console.log('c', res)
//   })

注意點及 try … catch … 的使用:

  • 1.async 和 await 要成對出現

* 缺少async : SyntaxError: await is only valid in async function

* 缺少await : 打印的就是 promise 類型

* 2. 如何處理 async 和 await 的異常情況

* try…catch() 如果沒有問題 => 跳過 catch, 如果有問題就會被catch 捕獲

* 3. async 就近原則, async 添加到 await最近的函數前面 (小心回調)

三種狀態:

Promise的三種狀態

? * pending 待定

? * fulfilled 完成 <== resolve() 成功

? * rejected 拒絕 <== reject() 失敗

測試:對Ajax進行Jquery封裝

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Document</title></head><body><script src="./node_modules/jquery/dist/jquery.js"></script><script>//http://localhost:3000// $.ajax({//   // 類型//   type: 'get',//   // 接口//   url: 'http://127.0.0.1:3000/post?pageIndex=1&pageSize=2&category=8',//   // 參數//   data: {},//   // 數據返回類型//   dataType: 'json',//   // 成功//   success: res => {//     console.log('成功', res)//   },//   // 失敗//   error: err => {//     console.log('失敗', err)//   },// })// 'http://127.0.0.1:3000/post?pageIndex=1&pageSize=2&category=8'// 自己手寫三遍function ml_ajax(options) {// 1. 創建 promise 實例let p = new Promise((resolve, reject) => {$.ajax({// 類型type: options.method || 'get',// 接口url: options.url,// 參數data: options.data || {},// 數據返回類型dataType: 'json',// 成功success: res => {// console.log('成功', res)resolve(res)},// 失敗error: err => {// console.log('失敗', err)reject(err)},})})// 2. 返回promise 實例return p}let url = 'http://127.0.0.1:3000/post?pageIndex=1&pageSize=2&category=8'ml_ajax({url,}).then(res => {console.log('666', res)})</script></body>
</html>

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

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

相關文章

個人沖刺9

1.昨天做了界面整體優化。 2.今天打算了解一下組成員的情況。 3.整體界面優化沒有什么問題。轉載于:https://www.cnblogs.com/Evak/p/10936840.html

iOS UITextField使用全攻略

//初始化textfield并設置位置及大小 UITextField *text [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //設置邊框樣式&#xff0c;只有設置了才會顯示邊框樣式 text.borderStyle UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone…

日期模糊查詢

SELECT * FROM 表名 t WHERE(to_char(t.日期字段,yyyy-MM-dd hh24:mi:ss)like %2011%)轉載于:https://www.cnblogs.com/macT/p/10865206.html

Uboot中start.S源碼的指令級的詳盡解析(轉)

Uboot中start.S源碼的指令級的詳盡解析轉載于:https://www.cnblogs.com/LittleTiger/p/10877516.html

Vuex說明及Todos項目改造

Vuex(vue) / Flux (angular) /Redux(react) vuex 是什么? 狀態管理工具 狀態即數據, 狀態管理就是管理組件中的data數據 Vuex 中的狀態管理工具,采用了 集中式 方式統一管理項目中組件之間需要通訊的數據 [看圖] 如何使用 最佳實踐 : 只將組件之間共享的數據放在 vuex …

Objective-C 深復制和淺復制與NSCopying協議

1.簡單復制只能實現淺拷貝&#xff1a;指針賦值&#xff0c;使兩個指針指向相同的一塊內存空間&#xff0c;操作不安全。 2. Foundation類已經遵守了<NSCopying>和 <NSMutableCopying>協議,即實現了copy和mutableCopy方法,因此Foundation對象可以使用這些方法創建對…

基于Vue項目打包上線配置

打包上線 開發階段 : npm run serve發布階段 : npm run build build之前 1. 把基準地址, 由開發階段的換成發布階段的 //main.js axios.defaults.baseURL http://localhost:30002. 忽略項目中打印的結果 // main.js console.log () > {}// 開發階段 > 注釋掉 >…

NSTimer 進階使用總結與注意事項

NSTimer 是 iOS 上的一種計時器&#xff0c;通過 NSTimer 對象&#xff0c;可以指定時間間隔&#xff0c;向一個對象發送消息。NSTimer 是比較常用的工具&#xff0c;比如用來定時更新界面&#xff0c;定時發送請求等等。但是在使用過程中&#xff0c;有很多需要注意的地方&…

一步一步教你實現iOS音頻頻譜動畫(一)

如果你想先看看最終效果再決定看不看文章 -> bilibili示例代碼下載 第二篇&#xff1a;一步一步教你實現iOS音頻頻譜動畫&#xff08;二&#xff09; 基于篇幅考慮&#xff0c;本次教程分為兩篇文章&#xff0c;本篇文章主要講述音頻播放和頻譜數據的獲取&#xff0c;下篇將…

微信小程序的基礎 (一)

微信小程序介紹- 鏈接 微信小程序&#xff0c;簡稱小程序&#xff0c;是一種不需要下載安裝即可使用的應用&#xff0c;它實現了應用“觸手可及”的夢想&#xff0c;用戶掃一掃或搜一下即可打開應用 1. 為什么是微信小程序? 微信有海量用戶&#xff0c;而且粘性很高&#x…

看YYModel源碼的一些收獲

關于源碼學習自己的一些感悟第一層&#xff1a;熟練使用&#xff1b;第二層&#xff1a;讀懂代碼&#xff1b;第三層&#xff1a;通曉原理&#xff1b;第四層&#xff1a;如何設計&#xff1b;自己學到了什么&#xff0c;還留有什么問題&#xff1b;關于分享關于線下演講分享和…

IDEA提交項目到SVN

一.提交步驟 VCS--Enable...-->點擊項目右鍵-->subversion-->share directory-->commit 二.IDEA SVN 忽略文件的設置 1》share .使用idea在將項目提交到svn的過程中遇到這樣的問題 將項目share之后再設置ignore files &#xff0c;在commit的時候&#xff0c;不會將…

小程序基礎 (二)

小程序開發框架 小程序開發框架的目標是通過盡可能簡單、高效的方式讓開發者可以在微信中開發具有原生 APP 體驗的服務。 整個小程序框架系統分為兩部分&#xff1a;邏輯層&#xff08;App Service&#xff09;和 視圖層&#xff08;View&#xff09;。 小程序提供了自己的視…

項目ITP(五) spring4.0 整合 Quartz 實現任務調度

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主同意不得轉載。https://blog.csdn.net/u010378410/article/details/26016025 2014-05-16 22:51 by Jeff Li 前言 系列文章&#xff1a;[傳送門] 項目需求&#xff1a; 二維碼推送到一體機上&#xff0c;給學生簽到掃…

喜歡用Block的值得注意-Block的Retain Cycle的解決方法

本文不講block如何聲明及使用&#xff0c;只講block在使用過程中暫時遇到及帶來的隱性危險。 主要基于兩點進行演示&#xff1a; 1.block 的循環引用(retain cycle) 2.去除block產生的告警時&#xff0c;需注意問題。 有一次&#xff0c;朋友問我當一個對象中的block塊中的訪問…

小程序基礎 (三)

5. 使用 slot 使用單個slot // 頁面 <Test><view>自定義內容</view> </Test>// 組件 <view><view>前面的內容</view><slot></slot><view>后面的內容</view> </view>使用多個slot - 具名 // 頁面 &…

【PyQt5】QT designer + eclipse 集成開發

【寫在前面的話】 考慮將pyqt5的界面開發qt designer 集成在eclipse中&#xff0c;并且&#xff0c;不利用cmd命令行進行轉換。 【工具】 1、pyqt5 2、qt designer 3、eclipse pydy 【步驟】 1、首先配置Qt designer。 菜單 run-->external Tools-->External tools confi…

iOS UIlabel文字排版(改變字間距行間距)分類

在iOS開發中經常會用到UIlabel來展示一些文字性的內容&#xff0c;但是默認的文字排版會覺得有些擠&#xff0c;為了更美觀也更易于閱讀我們可以通過某些方法將UIlabel的行間距和字間距按照需要調節。 比如一個Label的默認間距效果是這樣&#xff1a; 然后用一個封裝起來的Cat…

MySQL查詢之聚合查詢

為了快速得到統計數據&#xff0c;提供了5個聚合函數&#xff1a; count(*)表示計算總行數&#xff0c;括號中寫星與列名&#xff0c;結果是相同的 查詢學生總數 select count(*) from students; max(列)表示求此列的最大值 查詢女生的編號最大值 select max(id) from students…

React基礎學習(第一天)

React 概述 : React 是一個用于 構建用戶界面 的 JavaScript 庫因為框架是有一整套解決方案的&#xff0c;React就是純粹寫UI組件的 沒有什么異步處理機制、模塊化、表單驗證這些。React和react-router, react-redux結合起來才叫框架&#xff0c;而React本身只是充當一個前端…