Promise

Promise是什么

  1. Promise是JS中进行异步编程的新的解决方案(旧的指纯回调)
  2. 从语法上来说:Promise是一个构造函数
  3. 从功能上来说:promise对象用来封装一个异步操作并可以获取其结果
  4. Promise 异步操作有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。

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

promise的状态

  1. fulfilled: promise已经被resolved。代码顺利被运行,没有出错(pending变为resolved);
  2. rejected:Promise已经被rejected。代码内部出错(pending变为rejected);
  3. pending:promose代码正在执行,没有完成也没有出错;

说明:只有这2种,且一个promise对象只能改变一次无论变为成功还是失败,都会有一个结果数据成功的结果数据一般称为vlaue,失败的结果数据一般称为reason。去取promise回调成功或失败的方法是通过,then—成功或.catch()----失败

Promise获取值

  1. .then():在一个Promise被resolved后调用
  2. .catch():在一个Promise被rejected后调用
  3. .finally():总是被调用

Promise基本流程

在这里插入图片描述

Promise简单实用

 <script lang="ts">
    const p = new Promise(
     setTimeout(()=>{
const time =Date.now()
if(time % 2===0){
  resolve("成功的回调",time)

}else{
  reject("失败的回调",time)
}
},1000)
    )
    console.log("sssss",p)
    p.then(//去promise中取值
      value=>{//
        console.log("成功的回调",value)//去promise中取成功的数据 onResolved
      },
      reason=>{
        console.log("失败的回调",reason)//去promise中取失败的数据 onRejected
      }
    )
  </script>

为什么使用Promise

  1. 回调函数的使用更加灵活。旧的需要在启动任务前指定函数任务,而promise可以在任何时候指定使用回调函数。promise:启动异步任务=>返回promie对象=>给promise对象绑定回调函数(甚至可以在异步任务结束后指定
function successCallback(result){
console.log("成功:"+result);
}
function failureCallback(error){
console.log("失败"+error)
}
//纯回调
createAudioFileAsync(audioSettings,successCallback,failureCallback)
//用Promise
const p = new Promise(
setTimeout((audioSettings)=>{
p.then(successCallback,failureCallback)
})
)
  1. Promise支持链式调用,可解决回调地狱问题

什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数执行的条件
回调地狱的缺点?不便于阅读/不便于异常处理
解决方案?promise链式调用
终极解决方案?async/await

dosomething (function (result){
dosomethingElse (result,function (newResult){
doThirdThing(newResult,function(finalResult){
console.log(finalResult)
},failureCallback)
},failureCallback)
},failureCallback)
//使用Promise
dosomething ().then(function(result){
return dosomethingElse (result)
})
.then(function(newResult){
return doThirdThing(newResult)
}).then(function(finalResult){
console.log(finalResult)
}).catch(failureCallback)
//promise中还是存在回调函数,最终解决办法是async await
asyncfunctionrequest({
try{
const result=awaitdoSomething()
const newResult=awaitdoSomethingElse(result)
const finalResult=awaitdoThirdThing(newResult)
console.log('Gotthefinalresult:'+finalResult)
}catch(error){
failureCallback(error)
}}

Promise的缺点

  1. 无法取消 Promise ,一旦新建它就会立即执行,无法中途取消。
  2. 如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
  3. 当处于 pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值