promise

说说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来玩玩.

相关文章
相关标签/搜索