在计算机程序设计中,回调函数,或简称回调(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的信息