Promise

Promise的含义

  Promise是异步编程的一种方式,相比于传统的回调函数,更容易理解和查阅,同时可以避免回调地狱的问题

特点:

  1.状态不被外界影响,只会受到异步操作结果的影响,如在读取网络数据的时候,读取不到就是失败(pending->rejected),成功就是(pending->fulfilled)

  2.状态被改变之后不能再次变化,只能变化一次.

 使用方式:实现将异步任务 同步化

new Promise((resolve,reject)=>{//new Promise()返回的是一个 Promise对象,then()返回的也是Promise对象
    //主线程执行
   //code
     resolve(value); //value就是then方法中的data参数 ,最后执行该函数
    //code  即使上面已经修改了状态但是也可执行,异步任务的执行放到最后。
}).then(function(data){//异步执行 前一个Promise的状态会决定后一个Promise的状态,并执行哪个函数。
    
    //状态为fulfilled
  return json.post ;// then()返回的Promise对象,而then的回调函数返回的结果是下一个Promise回调函数的参数。
},function(e){

   //状态为rejected 
}).catch((e)=>{
  //如果没有catch捕获错误,外部是无法捕获错误的,不会有任何反应。
  //错误会冒泡...前面的错误可能会被catch捕获
  //捕获所有的异常,如果之前存在reject的函数(then中的)就不捕获该函数之前的异常了,如果该异常函数之前都不存在任何解决错误的函数就都捕获。
})
.finally(()=>{
  //不管执行成不成功就得执行的一步
})
.done(function(){
  //回调链的尾部,保证任何可能出现的错误,防止最后一个Promise出现错误,无法捕获。
  
})

    除了上面显示的一些方法之外还有一些主要的方法:

    Promise.all([p1,p2,p3])  all的参数数组(有遍历器接口的对象)中存放的都是Promise对象:

       1.只有所有的Promise对象都变成Fulfilled才是Fulfilled

         2.只要有一个Promise是rejected就是rejected

        (类似于数组的every方法)

    Promise.race([p1,p2,p3]) 同上

       1.只要有一个状态改变整个的状态就改变

       2.整个的状态是率先改变的状态。

    Promise.resolve() 将现有的对象转化成Promsie对象

      1.参数是一个Promsie对象,直接转换成该参数对象继续执行

      2.参数是一个包含then方法的对象,将该对象转换成Promise对象之后,立即执行其内部的then方法,然后再继续执行

      3.参数不是一个对象,将该参数作为下次then(resolved回调函数)中的参数。

      4.没有参数,直接返回一个Promise,继续执行的then中的resolved回调函数中没有参数。

    Promise.reject() 将现有的对象转化成Promise对象 ,基本上和Promise.resolve()相同。

    Promise.try() 让同步任务同步执行,异步任务异步执行。

    

const  f = function(){console.log("1")}
Promise.try(f);
console.log("2");
//1
//2

 

posted @ 2019-11-22 17:42  唐糖PJS  阅读(122)  评论(0编辑  收藏  举报