2022-02-06 promise

promise

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。它最早由社区提出并实现,ES6将其写进了语言标准,统一了用法,并原生提供了Promise对象。

  • 含义: Promise是异步编程的一种解决方案,
  • 优点: 相比传统回调函数和事件更加合理和优雅,Promise是链式编程(后面会详细讲述),有效的解决了令人头痛的回调地狱问题,Promise的结果有成功和失败两种状态,只有异步操作的结果,可以决定当前是哪一种状态,外界的任何操作都无法改变这个状态
  • 基本用法:
    我们用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数,如:
function p1(){
  return new promise((resolve,reject)=>{
  // 一些逻辑代码
  if(true){ 
      resolve()
  }else{
      reject();
  }
})
} 
// then 是一个函数。有两个参数,第一个参数就是接收resolve返回的数据。第二个参数接收reject返回的数据。
p1().then((data)=>{
    // 接收resolve 返回的数据
},(data)=>{
    // 接收reject的返回的数据
});
// catch  // 接收reject传来的数据或者捕捉到then()中的运行报错时,做些什么
p1().catch(()=>{
  
})
// 不管什么状态都会执行到这
p.finally(()=>{

})

常用API

  1. resolve 返回异步操作成功的结果
  2. reject 返回异步操作失败的结果
  3. then 执行Promise状态是成功的操作
  4. catch 执行Promise状态是失败的操作
  5. finally 不管Promise状态是成功或失败都执行的操作

Promise.all
Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

function p1(){
  return new Promise((resolve)=>{
   console.log("打印p1");
    resolve("p1");
  })
}
function p2(){
  return new Promise((resolve)=>{
   console.log("打印p2");
    resolve("p2");
  })
}
 function p3(){
  return new Promise((resolve)=>{
   console.log("打印p3");
    resolve("p3");
  })
}

const p = Promise.all([p1(), p2(), p3()]).then((datas){
    console.log(data);
})

//打印p1
//打印p2
//打印p3
//["p1", "p2", "p3"]
p的状态由p1、p2、p3决定,分成两种情况。
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容