Promise基础

535 阅读3分钟

promise是什么?

1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
promise包含三种状态:

  • 待定(pending): 初始状态,不是成功或失败状态。
  • 已兑现(fulfilled): 意味着操作成功完成。
  • 已拒绝(rejected): 意味着操作失败。
    只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是“承诺”,表示其他方式无法改变。

什么是异步?

举一个例子:
将一个耗时很长的A项目交给系统之后,继续去做B的项目,当B项目做完,回来继续做A剩下的项目。AB项目完成的顺序与交给系统的时间无关,所以叫异步。

也就是说:异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

什么是同步?

再举一个例子:
一个饭店里面,有一个服务员A。来了一名顾客甲,A就来服务甲,在服务的期间,来了一名顾客乙,A需要等甲的菜上齐了,吃完,并且结完账后再去服务员乙顾客。有顺序的完成一系列工作。

也就是说:同步指的是一次只能完成一件任务,并且得到结果。如果有多个任务,必须排队,前面一个任务完成,再执行后面一个任务,以此类推。

promise的创建

想要创建一个promise对象,可以使用new来调用Promise构造器来进行实例化。
创建Promise实例的步骤:

var promise = new Promise(function(resolve, reject) { 
    // 异步处理
    // 处理结束后、调用resolve 或 reject 
});

Promise使用

Promise 是一个构造函数, new Promise 返回一个 promise对象 接收一个执行函数作为参数, 有两个函数类型形参resolve reject。

promise对象方法

  1. then方法注册 当resolve(成功)/reject(失败)的回调函数
promise.then(onFulfilled , onRejected );
// onFulfilled 是用来接收promise成功的值
// onRejected 是用来接收promise失败的原因

※※※ then是异步执行方式。

  1. resolve(成功)会被onFulfilled调用
var promise = new Promise(function(resolve, reject) { 
    resolve("成功")//状态由 pending => fulfilled
});
promise.then((result) => {
    console.log(result);
}),reason => {
    //不会被调用
}
  1. reject(失败) onRejected会被调用
var promise = new Promise(function(resolve, reject) { 
    reject("失败")//状态由 pending => rejected
});
promise.then((result) => {
    //不会被调用
}),reason => {
    console.log(rejected);
}
  1. promise.catch
    在链式写法中可以捕获前面then中发送的异常
promise.then((result) => {
    //成功调用
}).catch((error) => {
    //捕捉错误
});   
  1. Promise的静态方法
  • Promise.resolve 返回一个fulfilled状态的promise对象
const promise = new Promise(resolve => {
   resolve('hello');
});
  • Promise.reject 返回一个rejected状态的promise对象
Promise.reject("error");
new Promise((res, rej) => {
   reject("error");
});