在計算機程序設計中,回調函數,或簡稱回調(Callback 即call then back 被主函數調用運算後會返回主函數),是指經過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用。這一設計容許了底層代碼調用在高層定義的子程序。回調函數是做爲參數傳遞給另外一個函數的函數,而後在外部函數內調用該函數以完成某種例程或操做。javascript
回調的用途十分普遍。例如,假設有一個函數,其功能爲讀取配置文件並由文件內容設置對應的選項。若這些選項由散列值所標記,則讓這個函數接受一個回調會使得程序設計更加靈活:函數的調用者可使用所但願的散列算法,該算法由一個將選項名轉變爲散列值的回調函數實現;所以,回調容許函數調用者在運行時調整原始函數的行爲。php
回調的另外一種用途在於處理信號或者相似物。例如一個POSIX程序可能在收到SIGTERM信號時不肯當即終止;爲了保證一切運行良好,該程序能夠將清理函數註冊爲SIGTERM信號對應的回調。java
回調亦能夠用於控制一個函數是否做爲:Xlib容許自定義的謂詞用於決定程序是否但願處理特定的事件。git
Promise 對象用於表示一個異步操做的最終狀態(完成或失敗),以及其返回的值。es6
1 new Promise( function(resolve, reject) {...} /* executor */ );
resolve
和
reject
兩個參數的函數 。Promise構造函數
執行時當即調用
executor
函數,
resolve
和
reject
兩個函數做爲參數傳遞給
executor
(executor 函數在Promise構造函數返回新建對象前被調用)。
resolve
和
reject
函數被調用時,分別將promise的狀態改成fulfilled(完成)或rejected(失敗)。executor 內部一般會執行一些異步操做,一旦完成,能夠調用resolve函數來將promise狀態改爲fulfilled,或者在發生錯誤時將它的狀態改成rejected。
Promise
對象是一個代理對象(代理一個值),被代理的值在Promise對象建立時多是未知的。它容許你爲異步操做的成功和失敗分別綁定相應的處理方法(handlers)。 這讓異步方法能夠像同步方法那樣返回值,但並非當即返回最終執行結果,而是一個能表明將來出現的結果的promise對象github
一個 Promise
有如下幾種狀態:算法
pending 狀態的 Promise 對象可能觸發fulfilled 狀態並傳遞一個值給相應的狀態處理方法,也可能觸發失敗狀態(rejected)並傳遞失敗信息。當其中任一種狀況出現時,Promise 對象的 then
方法綁定的處理方法(handlers )就會被調用(then方法包含兩個參數:onfulfilled 和 onrejected,它們都是 Function 類型。當Promise狀態爲fulfilled時,調用 then 的 onfulfilled 方法,當Promise狀態爲rejected時,調用 then 的 onrejected 方法, 因此在異步操做的完成和綁定處理方法之間不存在競爭)。json
由於
和 Promise.prototype.then
方法返回promise 對象, 因此它們能夠被鏈式調用。數組Promise.prototype.catch
不要和惰性求值混淆: 有一些語言中有惰性求值和延時計算的特性,它們也被稱爲「promises」,例如Scheme. Javascript中的promise表明一種已經發生的狀態, 並且能夠經過回調方法鏈在一塊兒。 若是你想要的是表達式的延時計算,考慮無參數的"箭頭方法": f = () =>
表達式
建立惰性求值的表達式,使用 f()
求值。promise
注意: 若是一個promise對象處在fulfilled或rejected狀態而不是pending狀態,那麼它也能夠被稱爲settled狀態。你可能也會聽到一個術語resolved ,它表示promise對象處於fulfilled狀態。關於promise的術語, Domenic Denicola 的 States and fates 有更多詳情可供參考。
Promise.length
Promise.prototype
Promise
構造器的原型.
Promise.all(iterable)
Promise.race(iterable)
Promise.reject(reason)
Promise.resolve(value)
fetch(url, options).then(function(response) { // handle HTTP response }, function(error) { // handle network error })
具體參數案例:
//兼容包 require('babel-polyfill') require('es6-promise').polyfill() import 'whatwg-fetch' fetch(url, { method: "POST", body: JSON.stringify(data), headers: { "Content-Type": "application/json" }, credentials: "same-origin" }).then(function(response) { response.status //=> number 100–599 response.statusText //=> String response.headers //=> Headers response.url //=> String response.text().then(function(responseText) { ... }) }, function(error) { error.message //=> String })
定義要獲取的資源。這多是:
一個 USVString
字符串,包含要獲取資源的 URL
。
一個 Request
對象。
一個配置項對象,包括全部對請求的設置。可選的參數有:
method
: 請求使用的方法,如 GET
、POST
。
headers
: 請求的頭信息,形式爲 Headers
對象或 ByteString
。
body
: 請求的 body
信息:多是一個 Blob
、BufferSource
、FormData
、URLSearchParams
或者 USVString
對象。注意 GET
或 HEAD
方法的請求不能包含 body
信息。
mode
: 請求的模式,如 cors
、 no-cors
或者 same-origin
。
credentials
: 請求的 credentials
,如 omit
、same-origin
或者 include
。
cache
: 請求的 cache
模式: default
, no-store
, reload
, no-cache
, force-cache
, 或者 only-if-cached
。
一個 Promise
,resolve
時回傳 Response
對象:
屬性:
status (number)
- HTTP請求結果參數,在100–599 範圍
statusText (String)
- 服務器返回的狀態報告
ok (boolean)
- 若是返回200表示請求成功則爲true
headers (Headers)
- 返回頭部信息,下面詳細介紹
url (String)
- 請求的地址
方法:
text()
- 以string
的形式生成請求text
json()
- 生成JSON.parse(responseText)
的結果
blob()
- 生成一個Blob
arrayBuffer()
- 生成一個ArrayBuffer
formData()
- 生成格式化的數據,可用於其餘的請求
其餘方法:
clone()
Response.error()
Response.redirect()
has(name) (boolean)
- 判斷是否存在該信息頭
get(name) (String)
- 獲取信息頭的數據
getAll(name) (Array)
- 獲取全部頭部數據
set(name, value)
- 設置信息頭的參數
append(name, value)
- 添加header的內容
delete(name)
- 刪除header的信息
forEach(function(value, name){ ... }, [thisContext])
- 循環讀取header的信息