说说promise吧, promise 承诺。Promise的理解就是 我对你作出承诺,我怎么怎么,而后我有可能成功,我作到了, 有可能失败, 我没作到, 就是这么个东西.(说的玄一点, 这是一个异步流程控制的一个东东, 至于什么是异步流程控制?我不知道)promise
new Promise((resolve, reject)=>{})
Promise的状态变化有两种, 从pending —> fulfilled或者 pending—>rejected异步
pending 是初始的状态, fulfilled 是成功的状态, 剩下的就是失败的状态rejected函数
Promise会当即执行, 可是状态的改变须要咱们来操做。prototype
let abcc = new Promise((resolve, reject)=> { console.log('当即执行了') setTimeout(()=>{ resolve('ccc') },1000) setInterval(()=> { console.log(abcc) },200) console.log('当即执行了2') })
thenrest
当Promise的状态发生改变,使用then方法来触发对应的处理方法.code
两个参数: then方法包含两个参数, 对应当Promise的状态为fulfilled和rejected的回调函数对象
省略参数: 将建立一个没有其余处理程序的新的Promise,继承Promise最终的状态, then被调用, 第几个参数省略,Promise将采用那个状态继承
因为then方法返回的是一个新的Promise对象, 因此不会影响到当前的Promise对象,因为返回来的是Promise,因此then后面能够then, then, then….无穷无尽,这样完美的避免了 回调地狱.回调函数
let o1 = new Promise((resolve,reject) => { resolve(1) }) o1.then((value)=>{ console.log('value'+ value) // 1 console.log(o1) // resolved 1 value +=1; return value; }).then((value)=>{ console.log(value) //2 console.log(o1) //resolved 1 })
catchio
由于咱们写的是程序, 因此常常要考虑程序出错的缘故. 就把rejected的函数捕捉给暴露出来了就是所谓的catch, 当状态变为rejected的时候, catch被调用
其实catch就是下面的缩写
Promise.prototype.then(undefined, onRejected)
看下下面这个
var p1 = new Promise(function(resolve, reject) { resolve('Success'); }); p1.then(function(value) { console.log(value); // "成功!" throw 'oh, no!'; or return Promise.reject('oh no ') }).catch(function(e) { console.log(e); // "oh, no!" }).then(function(){ console.log('after a catch the chain is restored'); }, function () { console.log('Not fired due to the catch'); });
catch返回的Promise状态, 因为catch是then(undefined, onrejected)的缩写, 第一个参数为空, 因此catch返回的Promise状态为成功
Promise.reject(reson)
返回一个用reason拒绝的Promsie
let o = Promise.reject('sss'); o.catch((reason) => { console.log(reason) // sss }).then(()=> { console.log('resolve') // 返回这个 理由在上面本身找 }, ()=> { console.log('reject') })
Promise.resolve()
Promise.resolve(value); 正常解析 Promise.resolve(promise); 根据promise的状态来往下传递 Promise.resolve(thenable); 根据then的状态来往下传递 Promise.resolve("Success").then(function(value) { console.log(value); // "Success" }, function(value) { // 不会被调用 })
Promise.all()
当全部参数中的promise都完成, 或者任意一个promise的状态变成reject,返回promise
let o1 = new Promise((resolve,reject)=>{ resolve('1') }) let o2 = new Promise((resolve,reject)=>{ resolve('2') }) let o3 = new Promise((resolve,reject)=>{ setTimeout(()=> { resolve('3') }, 3000) }) Promise.all([o1, o2, o3]).then((value)=>{ console.log(value) }).catch((reason)=>{ console.log(reason) })
Promise.race()
和all相反, 只要有一个状态改变, 就会返回
能够讲上面的all换成race来玩玩.