Async CallBack promise fetch

Callback (回調函數)

計算機程序設計中,回調函數,或簡稱回調(Callback 即call then back 被主函數調用運算後會返回主函數),是指經過函數參數傳遞到其它代碼的,某一塊可執行代碼引用。這一設計容許了底層代碼調用在高層定義的子程序。回調函數是做爲參數傳遞給另外一個函數的函數,而後在外部函數內調用該函數以完成某種例程或操做。javascript

使用

回調的用途十分普遍。例如,假設有一個函數,其功能爲讀取配置文件並由文件內容設置對應的選項。若這些選項由散列值所標記,則讓這個函數接受一個回調會使得程序設計更加靈活:函數的調用者可使用所但願的散列算法,該算法由一個將選項名轉變爲散列值的回調函數實現;所以,回調容許函數調用者在運行時調整原始函數的行爲。php

回調的另外一種用途在於處理信號或者相似物。例如一個POSIX程序可能在收到SIGTERM信號時不肯當即終止;爲了保證一切運行良好,該程序能夠將清理函數註冊爲SIGTERM信號對應的回調。java

回調亦能夠用於控制一個函數是否做爲:Xlib容許自定義的謂詞用於決定程序是否但願處理特定的事件。git

Promise

Promise 對象用於表示一個異步操做的最終狀態(完成或失敗),以及其返回的值。es6

語法

1 new Promise( function(resolve, reject) {...} /* executor */  );

 

 

參數

executor
executor是帶有  resolve 和  reject 兩個參數的函數 。Promise構造函數 執行時當即調用 executor 函數,  resolve 和  reject 兩個函數做爲參數傳遞給 executor(executor 函數在Promise構造函數返回新建對象前被調用)。 resolve 和  reject 函數被調用時,分別將promise的狀態改成fulfilled(完成)或rejected(失敗)。executor 內部一般會執行一些異步操做,一旦完成,能夠調用resolve函數來將promise狀態改爲fulfilled,或者在發生錯誤時將它的狀態改成rejected。
若是在executor函數中拋出一個錯誤,那麼該promise 狀態爲rejected。executor函數的返回值被忽略。

描述

Promise 對象是一個代理對象(代理一個值),被代理的值在Promise對象建立時多是未知的。它容許你爲異步操做的成功和失敗分別綁定相應的處理方法(handlers)。 這讓異步方法能夠像同步方法那樣返回值,但並非當即返回最終執行結果,而是一個能表明將來出現的結果的promise對象github

一個 Promise有如下幾種狀態:算法

  • pending: 初始狀態,既不是成功,也不是失敗狀態。
  • fulfilled: 意味着操做成功完成。
  • rejected: 意味着操做失敗。

pending 狀態的 Promise 對象可能觸發fulfilled 狀態並傳遞一個值給相應的狀態處理方法,也可能觸發失敗狀態(rejected)並傳遞失敗信息。當其中任一種狀況出現時,Promise 對象的 then 方法綁定的處理方法(handlers )就會被調用(then方法包含兩個參數:onfulfilled 和 onrejected,它們都是 Function 類型。當Promise狀態爲fulfilled時,調用 then 的 onfulfilled 方法,當Promise狀態爲rejected時,調用 then 的 onrejected 方法, 因此在異步操做的完成和綁定處理方法之間不存在競爭)。json

由於 Promise.prototype.then 和  Promise.prototype.catch 方法返回promise 對象, 因此它們能夠被鏈式調用。數組

不要和惰性求值混淆: 有一些語言中有惰性求值和延時計算的特性,它們也被稱爲「promises」,例如Scheme. Javascript中的promise表明一種已經發生的狀態, 並且能夠經過回調方法鏈在一塊兒。 若是你想要的是表達式的延時計算,考慮無參數的"箭頭方法":  f = () =>表達式 建立惰性求值的表達式,使用 f() 求值。promise

注意: 若是一個promise對象處在fulfilled或rejected狀態而不是pending狀態,那麼它也能夠被稱爲settled狀態。你可能也會聽到一個術語resolved ,它表示promise對象處於fulfilled狀態。關於promise的術語, Domenic Denicola 的 States and fates 有更多詳情可供參考。

屬性

Promise.length
length屬性,其值老是爲 1 (構造器參數的數目).
Promise.prototype
表示  Promise 構造器的原型.

方法

Promise.all(iterable)
這個方法返回一個新的promise對象,該promise對象在iterable參數對象裏全部的promise對象都成功的時候纔會觸發成功,一旦有任何一個iterable裏面的promise對象失敗則當即觸發該promise對象的失敗。這個新的promise對象在觸發成功狀態之後,會把一個包含iterable裏全部promise返回值的數組做爲成功回調的返回值,順序跟iterable的順序保持一致;若是這個新的promise對象觸發了失敗狀態,它會把iterable裏第一個觸發失敗的promise對象的錯誤信息做爲它的失敗錯誤信息。Promise.all方法常被用於處理多個promise對象的狀態集合。(能夠參考jQuery.when方法---譯者注)
Promise.race(iterable)
當iterable參數裏的任意一個子promise被成功或失敗後,父promise立刻也會用子promise的成功返回值或失敗詳情做爲參數調用父promise綁定的相應句柄,並返回該promise對象。
Promise.reject(reason)
返回一個狀態爲失敗的Promise對象,並將給定的失敗信息傳遞給對應的處理方法
Promise.resolve(value)
返回一個狀態由給定value決定的Promise對象。若是該值是一個Promise對象,則直接返回該對象;若是該值是thenable(即,帶有then方法的對象),返回的Promise對象的最終狀態由then方法執行決定;不然的話(該value爲空,基本類型或者不帶then方法的對象),返回的Promise對象狀態爲fulfilled,而且將該value傳遞給對應的then方法。一般而言,若是你不知道一個值是不是Promise對象,使用Promise.resolve(value) 來返回一個Promise對象,這樣就能將該value以Promise對象形式使用。

Fetch

語法說明

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 }) 

url

定義要獲取的資源。這多是:

  • 一個 USVString 字符串,包含要獲取資源的 URL

  • 一個 Request 對象。

options(可選)

一個配置項對象,包括全部對請求的設置。可選的參數有:

  • method: 請求使用的方法,如 GETPOST

  • headers: 請求的頭信息,形式爲 Headers 對象或 ByteString

  • body: 請求的 body 信息:多是一個 BlobBufferSourceFormDataURLSearchParams 或者 USVString 對象。注意 GET 或 HEAD 方法的請求不能包含 body 信息。

  • mode: 請求的模式,如 cors、 no-cors 或者 same-origin

  • credentials: 請求的 credentials,如 omitsame-origin 或者 include

  • cache: 請求的 cache 模式: defaultno-storereloadno-cacheforce-cache, 或者 only-if-cached

response

一個 Promiseresolve 時回傳 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()

response.headers

  • 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的信息

相關文章
相關標籤/搜索