11-ES6之Promise 对象

概述

是异步编程的一种解决方案。

从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

Promise 状态

状态的特点

Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。

Promise 对象只有:从 pending 变为 fulfilled 和从 pending 变为 rejected 的状态改变。只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolved(已定型)。

状态的缺点

无法取消 Promise ,一旦新建它就会立即执行,无法中途取消。

如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。

当处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

then 方法

then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。

then 方法的特点

在 JavaScript 事件队列的当前运行完成之前,回调函数永远不会被调用。

  <script>
        //异步操作更方便
        //基本操作:async返回一个Promise对象then,catch
        //解决回调地狱问题
        //async是\Generator的一个话音语法糖
        async function f(){
            //return await 'hello'
            //await返回的是Promise对象
            let s= await "hello"
            let data= await s.split('')
            return data
        }

        async function f2(){
            throw new Error("error")
            return data
        }        
        //v是等待所有await执行完后的结果
        f().then(v=>{console.log(v)}).catch((err)=>{})
        f2().then(v=>{console.log(v)}).catch((err)=>{console.log(err)})

        async function f3(){
            //这地方如果有reject就不会向下执行
            await Promise.reject("eroor");
            await Promise.resolve("success");


        }

        async function f4(){
            //如果向继续向下try
            try{
                await Promise.reject("eroor");
            }    
            catch(error){ }
            await Promise.resolve("success");

            
        }
    </script>

  

posted on 2020-09-12 17:32  shisanjun  阅读(133)  评论(0编辑  收藏  举报

导航