promise 與 fetch 詳細介紹 與 使用
1. promise
1.1 含義
Promise 是非同步程式設計的一種解決方案,比傳統的解決方案——回撥函式和事件——更合理和更強大;
1.2 基本語法
new Promise(function(resolve, reject) {
// ... some code 比如傳送ajax
if (/* 非同步操作成功 */){
resolve(value);
} else {
reject(error);
}
}).then(data => {})
.catch( err => {});
1.3 狀態
三個方法呼叫,對應三個狀態修改;pending--> notify(); fulfilled--> resolve() ; unfulfilled ->reject();三個方法返回的ren
1.4 方法介紹:
Promise: 構造方法,裡面傳遞一個函式,這個函式體內一般非同步操作,成功呼叫resolve 方法,反之呼叫reject 方
then: 指定resolved
狀態和rejected
狀態的回撥函式。引數說明,第一個是狀態為成功的回撥函式,第二個是失敗的回撥
如果當前Promise物件狀態為成功,那麼在 new promise((resolve, reject) =>{resolve()}).then(data=>{}) ;then的第一個回撥將被呼叫;
catch:在非同步操作丟擲異常時觸發,如果promise狀態為 unfulfilled 也將會被觸發;
all :非同步操作並行執行,當同時執行完畢後,才會執行
race: 當多個非同步操作一同執行,當有一個執行完畢,那麼方法將被執行
1.5 一般使用
const getJson = () =>{ return new Promise((resolve, reject) => { setTimeout(()=>{ let a = Math.random()*10; if(a<5){ resolve(a); }else{ reject(a); } },1000); }); } let returnData = getJson().then(data => { console.log("我是成功回撥!"+data); }).catch( err => { console.log("我是失敗回撥!"+err); })
2. fetch
2.1 介紹
fetch是用來取代傳統的XMLHttpRequest
2.2 基本語法
fetch('user/v1/getInfo',{
method:'get',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
'X-Requested-With': 'XMLHttpRequest',
},
body: new FormData(document.getElementById('comment-form'))
//或者
//body: JSON.stringify({
// email: '[email protected]'
// name: 'jim'
//})
}).then(response =>{
const type = 'json';
//response 這個物件並不與 servlet中的一樣
if(type==='json'){
return response.text(); //返回一個text的resolve的promise物件
}else{
return response.json(); //返回一個json的resolve的promise物件
}
}).then(data => {
console.log("返回的資料!");
//可以設定返回一個 promise物件 的狀態
}).catch(err => {
console.log("請求異常!");
})
2.3 方法物件介紹
Response 代表響應, fetch 的 then
方法接收一個 Response
例項, 當然你也可以手動建立 Response
物件 —— 比如在 service workers 中可能會用到. Response 可以配置的引數包括:
type
- 型別,支援:basic
,cors
url - 響應的 URL
useFinalURL
- Boolean 值, 說明這是否是響應的最終 URLstatus
- 狀態碼 (例如:200
,404
, 等等)ok
- Boolean值,代表響應是否成功(status 值在 200-299 之間)statusText
- 與狀態碼相對應的狀態值(例如:OK為200
)headers
- 與響應相關聯的 Headers 物件.- redirected - 指示響應是否是重定向的結果。也就是說,它的 URL 列表有多條目錄。
Response
提供的方法如下:
clone()
- 建立一個 Response 物件的克隆.error()
- 返回一個與網路錯誤相關的新 Response 物件.redirect()
- 重定向,使用新的 URL 建立新的 response 物件..arrayBuffer()
- 返回一個 resolve 是 ArrayBuffer 的 promise 物件。blob()
- 返回一個 resolve 是 Blob 的 promise 物件。formData()
- 返回一個 resolve 是 FormData 的 promise 物件。json()
- 返回一個 resolve 是 JSON 的 promise 物件。text()
- 返回一個 resolve 是文字的 promise 物件。
Request 物件表示一次 fetch 呼叫的請求資訊。傳入 Request 引數來呼叫 fetch, 可以執行很多自定義請求的高階用法:
method
- 支援GET
,POST
,PUT
,DELETE
,HEAD
url
- 請求的 URLheaders
- 對應的Headers
物件referrer
- 請求的引用者(例如:client)mode
- 是否允許跨域請求,以及哪些響應的屬性是可讀的。可選值:cors
:(預設),允許跨域請求,將遵守 CORS 協議。no-cors:該模式允許來自 CDN 的指令碼、其他域的圖片和其他一些跨域資源。前提條件是請求的 method 只能是 HEAD、GET 或 POST。此外,如果 ServiceWorkers 攔截了這些請求,它不能隨意新增或者修改除這些之外 Header 屬性。第三,js 不能訪問 Response 物件中的任何屬性,這確保了跨域時 ServiceWorkers 的安全和隱私資訊洩露問題。
same-origin:如果是一個跨域請求,將返回一個 error。
navigate:支援導航的模式,僅用於 HTML 導航。
credentials
- 設定 cookies 是否隨請求一起傳送。可選值:omit:(預設),不傳送 Cookie。
same-origin:同域下自動傳送 Cookie。
include:始終傳送 Cookie,即使是跨域。
redirect
- 定義重定向處理方式。可選值:follow(預設), error, manual。integrity
- 子資源完整性值。cache
- 設定快取模式。可選值:default:瀏覽器在其 HTTP 快取中查詢匹配的請求。
a. 如果匹配並且是新鮮的,它將從快取中返回。
b. 如果存在匹配但已失效,則瀏覽器將向遠端伺服器發出有條件的請求。如果伺服器指出資源沒有改變,它將從快取中返回。
否則資源將從伺服器下載並且快取將被更新。
c. 如果沒有匹配,瀏覽器將發出正常的請求,並且下載的資源更新快取。
no-store:瀏覽器從遠端伺服器獲取資源,而不先檢視快取,並且不會使用下載的資源更新快取。
reload:瀏覽器從遠端伺服器獲取資源,而不先檢視快取,但隨後將使用下載的資源更新快取。
no-cache:瀏覽器在其 HTTP 快取中查詢匹配的請求。
a. 如果匹配,新鮮或陳舊,瀏覽器將向遠端伺服器發出有條件的請求。如果伺服器指出資源沒有改變,它將從快取中返回。否則資源將從伺服器下載並且快取將被更新。
b. 如果沒有匹配,瀏覽器將發出正常的請求,並用下載的資源更新快取。
force-cache:瀏覽器在其 HTTP 快取中查詢匹配的請求。
a. 如果有匹配,新鮮或陳舊,它將從快取中返回。
b. 如果沒有匹配,瀏覽器將發出正常的請求,並用下載的資源更新快取。
only-if-cached:瀏覽器在其 HTTP 快取中查詢匹配的請求。只能用在 mode 為 same-origin 的情況下
a. 如果匹配,新鮮或陳舊,將從快取中返回。
b. 如果沒有匹配,瀏覽器將返回一個錯誤。
3. promise 與 fetch 聯合使用
const ajax_ = (url,args,type='json') => {
return new Promise((resolve, reject) => {
fetch(url,args).then(function (response) {
let data = '';
if (type === 'json')
data = response.json();
else
data = response.text();
return data;
}).then(data => {
if (type === 'json' && data.code==404 ) {
console && console.error('請求異常:'+data.msg);
reject('請求異常:'+data.msg);
}else {
resolve(data);
}
}).catch(function (ex) {
console && console.error('請求異常:'+ex);
reject('請求異常:'+ex);
});
});
}
ajax_ ('user/v1/getInfoById',{method:'get',headers:{...},body:{username,password}});
相關推薦
promise 與 fetch 詳細介紹 與 使用
1. promise 1.1 含義 Promise 是非同步程式設計的一種解決方案,比傳統的解決方案——回撥函式和事件——更合理和更強大; 1.2 基本語法 new Promise(function(resolve, reject) { // ... some
android開發框架總結 (二)MVP與MVVM詳細介紹與對比,如何選擇適合的框架(乾貨!)
前言 本篇文章將非常“細緻”地總結分析MVP與MVVM這兩種框架對於架構的選擇做了比較多的分析,應該是乾貨滿滿,如果你對這兩者的使用與選擇上還有迷惑之處。真的希望你能認真看完。 如果你是非常有經驗的程式猿,那就當相互學習總結,如果有不同看法還望指教。當然,我也是非常想進步的。  
文件上傳到tomcat服務器 commons-fileupload的詳細介紹與使用
部分 中文字符 form 引用 編碼 path -type dex item 三個類:DiskFileUpload、FileItem和FileUploadException。這三個類全部位於org.apache.commons.fileupload包中。 首先需要說明一下f
二、Linux系統硬鏈接和軟鏈接詳細介紹與實踐
導致 9.png 創建 訪問 tap 除了 all window tor 鏈接的概念 在linux系統中,鏈接可分為兩種:一種被稱為硬鏈接(Hard LinK),另一種被稱為軟鏈接或符號鏈接(Symbolic Link)。在默認不帶參數的情況下,執行ln命令創建的鏈
docker集群(二)--portainer+TLS安全連接docker主機(詳細介紹與使用心得)
chm log usr tls term 參考 正常 pac 文件中 http://blog.51cto.com/mysky0708/2298049承接上文,在生產中如何安全的鏈接docker主機呢?我們采用TLS秘鑰方式。步驟:第一部分:首先在docker主機上生成秘鑰,
AES加密演算法的詳細介紹與實現
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "aes.h" /** * S盒 */ static const int S[16][16] = { 0x63, 0
Tensorflow stack 與 unstack 詳細介紹
tf.stack() tf.stack(values, axis=0, name=’stack’) 以指定的軸axis,將一個維度為R的張量陣列轉變成一個維度為R+1的張量。即將一組張量以指定的軸,提高一個維度。 假設要轉變的張量陣列values的長度為N,其
HashMap與ConcurrentHashMap詳細介紹文章
前言 Map 這樣的 Key Value 在軟體開發中是非常經典的結構,常用於在記憶體中存放資料。 本篇主要想討論 ConcurrentHashMap 這樣一個併發容器,在正式開始之前我覺得有必要談談 HashMap,沒有它就不會有後面的 Concurrent
Dubbo詳細介紹與安裝使用過程
1 Dubbo介紹 1.1 dubbox簡介 隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。 單一應用架構 當網站流量很小
IIS和ASP的標題廣告管理系統的詳細介紹與使用
標題廣告是Web上最常見的廣告形式。本文介紹了一個基於IIS和ASP的標題廣告管理系統,該系統支援廣告客戶和廣告的管理,能夠隨機選擇廣告並生成顯示廣告的HTML程式碼(但參考廣告的等級、顯示次數限制、點選次數限制),並能夠記錄廣告顯示、點選的歷史紀錄。 一、資料庫表結構 標題廣告也就是Bann
localStorage詳細介紹(與sessionStorage的區別)
HTML5上的LocalStorage基本用法 1.獲取localStorage的長度:window.localStorage.length 2.新增/編輯localStorage的內容:window.localStorage.setItem(鍵,值); 3.根
Quartz中時間表達式詳細介紹與樣例分析
Quartz中時間表達式的設定-----corn表示式 時間格式: <!-- s m h d m w(?) y(?) -->, 分別對應: 秒>分>小時>日>月>周>年, 舉例: 1.每天什麼時候執行: 0 59 23 * * ?
終於等到你,最強 IDE Visual Studio 2017 正式版釋出(附詳細介紹與下載地址)
Visual Studio 2017 正式版釋出,該版本不僅添加了實時單元測試、實時架構依賴關係驗證等新特性,還對許多實用功能進行了改進,如程式碼導航、IntelliSense、重構、程式碼修復和除錯等等。無論使用哪種語言或平臺,都能節省開發者在日常任務上花費的時
Yarn的安裝與使用詳細介紹
不知道大家有沒有覺察到Facebook近年大招頻出。Yarn是Facebook最近釋出的一款依賴包安裝工具。Yarn是一個新的快速安全可信賴的可以替代NPM的依賴管理工具,Yarn正式釋出沒幾天已經迅速達到了數萬贊,就可以知道大家苦NPM久已。這篇文章將詳細介紹Yarn的安
SQLite中的WAL機制詳細介紹-與回滾日誌原理
執行c 預測 修改 blog 回滾 事務性 優點 shm nal 一、什麽是WAL? WAL的全稱是Write Ahead Logging,它是很多數據庫中用於實現原子事務的一種機制,SQLite在3.7.0版本引入了該特性。 二、WAL如何工作? 在引入WAL機制之
【模式識別與機器學習】——PCA與Kernel PCA介紹與對比
PCA與Kernel PCA介紹與對比 1. 理論介紹 PCA:是常用的提取資料的手段,其功能為提取主成分(主要資訊),摒棄冗餘資訊(次要資訊),從而得到壓縮後的資料,實現維度的下降。其設想通過投影矩陣將高維資訊轉換到另一個座標系下,並通過平移將資料均值變為零。PCA認為,在變換過後的
C++字串流stringstream與string知識介紹與用法小結
之前總結了C++的檔案輸出輸入流的相關知識,通過介紹底層的streambuf緩衝區,從而與stringstream流(字串流)聯絡了起來,本文就對此進行簡單的介紹。 首先介紹string。 string 是 C++ 提供的字串類,和 C 型別的字串相比,除了有
Cookie與Session的介紹與區別
本文分別對Cookie與Session做一個介紹和總結,並分別對兩個知識點進行對比分析,讓大家對Cookie和Session有一個更深入的瞭解,並對自己的開發工作中靈活運用帶來啟示。 一、Cookie機制 Cookies是伺服器在本地機器上儲存的小段
Huffman樹與Huffman編碼—介紹與基本應用
今天來談談huffman樹吧。 先介紹一下樹的路徑長度(path length of a tree,PL),和樹的帶權路徑長度(Weighted Path Length of Tree,WPL)。我們定義每個節點到樹根的距離為l[i]。樹的路徑長度(PL):所有節點到根的距
Spring BeanFactory與FactoryBean的區別及其各自的詳細介紹於用法
排除 tle 判斷 service 關系 符號 它的 extc () 1. BeanFactory BeanFactory,以Factory結尾,表示它是一個工廠類(接口),用於管理Bean的一個工廠。在Spring中,BeanFactory是IOC容器的核心接口,它的