语法、promise的两个属性、状态属性的三个值以及规则、then之后的返回值、promise函数同步但是then方法内部代码是异步执行
主要应用是封装ajax操作
Promise是es6引入的异步编程的新的解决方案,通过封装异步操作并可以获取成功或者失败的结果。Promise提供统一的api。Promise对象有两个属性,一个是PromiseState,代表的是状态,一个是PromiseResult,代表的是内容
新建一个promise构造函数,函数接受一个函数作为参数,同时该函数有两个参数,reject和resolve。执行异步操作,成功执行resolve(),状态变成resolved状态;失败执行reject(),状态变成rejected状态。无论成功还是失败都可以通过.then()指定成功和失败的回调函数,catch只能调用失败的回调函数。
promise的三个状态:pending,表示进行中,fulfilled也是resolved,表示成功,rejected,表示失败。只能从pending->resolved或者pending->rejected。构造函数中的 resolve 或 reject 只有第一次执行有效,多次调用没有任何作用,即promise 状态一旦改变则不能再变。
Promise是可以链式回调,而且是可以回调穿透的,回调穿透的意思是可以连续调then方法,只在最后加上catch方法就可以了。
为什么说promise是解决异步编程:在then方法中的内容是异步执行的,即走到then方法之后是可以继续执行和then同级的下编代码,再去执行then里面的代码,所以是实现异步编程。简而言之,执行到then方法之后,不用等到then方法中回调函数执行完毕,就可以继续执行跟then平级的下方的代码。
为什么用promise可以解决异步转同步的问题:Promise函数是同步的,但是then里面的函数是异步的。把promise函数中的resolve或者reject中的代码走完,才会触发then方法中的回调函数。这是promise实现异步转化为同步的关键。简而言之,只有把p函数的内容执行完才能执行then里面的回调。
Promise