promise的特点、缺点、fulfilled

本文探讨了Promise对象在处理异步操作时的主要特点,包括其状态的不可变性和链式调用的优势。Promise允许我们将复杂的回调地狱转化为有序的执行流程。然而,Promise也存在无法取消、错误处理和pending状态的不确定性等问题。通过示例展示了如何使用Promise处理AJAX请求,阐述了Promise在现代JavaScript开发中的重要角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个特点

(1)对象的状态不受外界影响

解释:以异步操作ajax和setTimeout为例,服务端什么时给接口前端根本控制不了,所以不受外界影响。promise里面接受的是一个匿名的函数作为promise的参数,并且函数自身有作用域的外部无法访问里面的东西,所以就更不受外界影响了,个人理解

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果,Ajax有结果返回,那你对一个接口发起一次ajax请求,肯定就只有一个结果,再你发送下一次ajax请求之前,肯定就不会再变了。多个promise对象执行一波操作的时候有的成功了成功了就叫resolved,失败的话就叫rejected,但无论成功还是失败,它们都完成了(fulfilled)。

但对于单个promisefulfilled和resolved基本没什么区别

但对多个比如(allSettled())

两个缺点:

1.无法取消promise,例如ajax请求,对与Ajax请求你发了就是发了没有get、post请求发一半说不发了的事

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

设置了回调就是,有结果了就回调

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

这个也很好理解,你发送了get、post请求后服务端那边的事,除非建立了长连接,不然不可能知道现在进行到哪一步了,因为http是一个无状态的协议,你连接之后他就断了

 

1.promise对象就是个容器,里面写的是未来执行的东西,比如setTimeout,它会再几秒后才会执行结束

又比如ajax请求它会在未来一段时间才会结束,多少时间不确定

2.从结构来看promise支持链式调用,所以promise对象它将多个相互嵌套的回调拉长拉平成一个队列,然后按照你希望的顺序去执行

 

//简单的demo实例
new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve('我是xxx,xxx123')
    },2000)
  }).then((data)=>{
    //成功
    console.log(data);
  },(err)=>{
    //失败
    console.log(err)
  })

 

Promise是一种用于处理异步操作的编程模式。它可以更优雅地处理回调地狱问题,使异步代码更易于理解和维护。 理解:Promise是一个代表异步操作最终完成或失败的对象。它有三个状态:pending(进行中)、fulfilled(已完成)和rejected(已失败)。可以通过调用resolve函数将Promise从pending状态转为fulfilled状态,或者通过调用reject函数将其转为rejected状态。Promise对象可以通过链式调用then()方法来处理成功的结果,或者通过catch()方法来处理失败的结果。 优点: 1. 可以避免回调地狱:通过链式调用then()方法,代码更易读、理解和维护。 2. 更好的错误处理:在链式调用中,可以通过catch()方法捕获并统一处理错误。 3. 支持并发操作:可以使用Promise.all()来并行执行多个Promise,等待它们都完成后再进行处理。 4. 可以灵活地组合使用:可以使用Promise的一些方法,如race()、allSettled()、finally()等,来满足不同的需求。 缺点: 1. 无法取消Promise:一旦创建了Promise对象,就无法取消它。这可能会导致资源的浪费。 2. 无法捕获所有错误:在Promise链中,如果没有使用catch()方法或没有处理异常,可能会导致错误被忽略或未被正确处理。 3. 代码可读性不高:尽管Promise可以解决回调地狱问题,但在处理复杂的异步操作时,可能会导致代码变得冗长和难以理解。 总的来说,Promise是一种非常有用的异步编程模式,它在处理异步操作时提供了更好的控制和可读性,但也需要谨慎使用,避免滥用和忽略错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值