认识Promise、了解基本结构、优势

Promise:在英文中有承诺的意思,是进行异步编程新的解决方案。在以往都是采用纯回调的方式,在我的博客可以看看,之前没有Promise时会造成回调地狱,回调地狱就是由于纯回调引起的嵌套,一层一层缩进:

如何解决回调地狱的问题——Promise,async,await_那只猫喝咖啡的博客-CSDN博客

首先Promise不是回调函数,是一个内置的构造函数,需要我们new 调用:

const p=new Promise((resolve,reject)=>{此处放异步任务})

resolve,reject 这两个参数是用来改变Pormise实例的状态。

状态的改变只有两种:

        1.pending=>fulfilled    由进行中到成功

        2.pending=>rejected  由进行中到失败

Promise的状态是有三种的:

        1.pending  初始状态:是非成功非失败的状态

        2.fulfilled     成功状态

        3.rejected    失败状态

接下来举个例子:

function fun(name) {
            const p = new Promise((resolve, reject) => {
                var flag=true
                setTimeout(() => {
                   if(flag){
                    // 如果符合符合某些条件就将promise的状态由初始状态更改为成功
                    resolve(name)
                   }else{
                       // 如果不符合符合某些条件就将promise的状态由初始状态更改为失败
                       reject()
                   }
                },1000)
            })
            return p
        }
        // fun的返回值是一个promise实例对象,.then方法是为promise实例对象指定成功和失败的回调
fun('李白')

setTimeout是一个异步任务。意思大概是当符合某些条件promise的状态就会变为成功/失败,

而.then方法就是为Promise实例(p)指定的成功或失败的回调,一旦调用的是resolve说明状态变为成功,就会做出成功所用到的业务逻辑,失败也是如此。

p.then(

        (response)=>{成功所要写的业务逻辑},

        (reason)=>{失败所要写的业务逻辑}

)

代码整体结构如下:

<script>
        function fun(name) {
            const p = new Promise((resolve, reject) => {
                var flag=true
                setTimeout(() => {
                   if(flag){
                    // 如果符合符合某些条件就将promise的状态由初始状态更改为成功
                    resolve(name)
                   }else{
                       // 如果不符合符合某些条件就将promise的状态由初始状态更改为失败
                       reject()
                   }
                },1000)
            })
            return p
        }
        // fun的返回值是一个promise实例对象,.then方法是为promise实例对象指定成功和失败的回调
        fun('李白')
        .then((response)=>{
            console.log("我得到了一个人的名字:",response)   //执行到这里时说明已经执行成功了,
            },(reason)=>{console.log(reason)})
     
    </script>

运行结果如下:

我们将不同的console.log("111111")放在其后面却发现最后输出的时候是在前面,由此可得,这是一个异步操作

 

 Promise的优势

        1.灵活:它不需要在定义时就要想好成功和失败应该做出什么逻辑,而是使用then()方法,想调用时再调用,相对来说比较灵活。

        2.解决了回调地狱:详情请看如何解决回调地狱的问题——Promise,async,await_那只猫喝咖啡的博客-CSDN博客

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值