Promise对象

本文详细介绍了Promise在JavaScript中的作用,其相比于回调和事件的优势,以及Promise的构造函数、三种状态、方法(then、catch、finally)和静态方法(resolve、reject、all、race)的使用示例。
摘要由CSDN通过智能技术生成

一、为什么有Promise?
Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理更强大。Promise 将嵌套格式的代码变成了顺序格式的代码。

二、Promise的语法

  1. Promise是JavaScript里的一个内置对象,es6规定,Promise对象是一个构造函数,用new Promise()来生成promise实例
  2. Promise构造函数接收一个函数作为参数,该函数又接收两个参数resolve和reject
  3. resolve和reject都是函数,也是Promise构造函数上的方法,调用resolve()表示将promise设置为成功状态,调用reject()设置为失败状态,resolve和reject的参数都是字符串,表示成功或失败的信息,可以自己定义
    实例:
//创建promise对象:
  let p = new Promise(function(resolve,reject){
    //resolve("成功") // 设置为成功
    reject("失败") //设置为失败
  });
  console.log(p); // p输出是一个promise对象

三、promise的三种状态

  1. pending 进行中
  2. fulfilled 成功
  3. rejected 失败

从pending转换为成功或失败状态是不可逆的

四、Promise的方法

  1. Promise原型对象上的方法then、catch、finally;
    成功调用then,失败调用catch,失败或成功都会调用finally()
let pA = Promise.resolve('A成功');
let pB = Promise.reject('B失败');

pA
.then(res=>{console.log(res);})
.catch(res=>console.log(res))
.finally(()=>{console.log("A成功了吗?");});

pB
.then(res=>{console.log(res);})
.catch(res=>console.log(res))
.finally(()=>{console.log("B成功了吗?");});

//输出:
//A成功
//B失败
//A成功了吗?
//B成功了吗?
  1. Promise的静态方法resolve、reject、all、race
    静态方法就是Promise构造函数上的方法,可以直接用“Promise.”调用,如:
let p1 = new Promise((resolve,reject)=> resolve("成功"));
let p2 = Promise.resolve("成功");
console.log(p1,p2);
// p2和p1输出结果是一样的

all和race:
参数都是数组
all()等待所有任务执行完毕执行
race()哪个任务先执行完就返回哪个任务的结果,后面的任务不再监测

// 创建两个异步任务p3、p4
function createTask(time){
  return new Promise((resolve,reject)=>{
    setTimeout(()=>{
      console.log(time);
      resolve(`执行完毕用了${time/1000}`);
    },time)
  })
}
let p3 = createTask(1000); // p3需要1秒执行
let p4 = createTask(4000); // p3需要4秒执行

Promise.all([p3,p4]).then(res=>console.log(res)).catch(res=>console.log(res))
// 4s后输出 ['执行完毕用了1秒', '执行完毕用了4秒']

Promise.race([p3,p4]).then(res=>console.log(res)).catch(res=>console.log(res)
// 1s后输出 执行完毕用了1秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值