es6中的Promise

Promise 的含义

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理

Promise的特点
  1. 对象的状态不受外界的影响,它有三种状态 pending==(进行中)、==fulfilled==(已成功)、==rejected(已失败)
  2. 状态一旦改变,就不会再变, promise状态只会由 pending -> fulfilled 或者由 pending -> rejected

Promise对象接受两个参数,用来将状态标记为已成功、或者已失败

let p1 = new Promise((resolve,reject) =>{
    setTimeout(()=>{
        resolve('success');//两秒后标记为成功
    },2000)
});
// Promise 对象的then方法返回 resolve函数传递的参数
p1.then((res) =>{
    console.log(res);//success
})
let p2 = new Promise((resolve,reject) =>{
    setTimeout(()=>{
        reject('error');//两秒后标记为失败
    },2000)
});
// Promise 对象的catch方法返回 reject函数传递的参数
p2.then((res) =>{
    console.log(res);
}).catch((err)=>{
    console.log(err);//error
})

如果我们创建Promise后,即标记了成功,又标记了失败,会发生什么呢?

let p1 = new Promise((resolve,reject)=>{
    console.log('---标记成功---');
    resolve('success');
    console.log('---标记失败---');
    reject("error");
});

p1.then((res)=>{
    console.log(res);
}).catch((err)=>{
    console.log(err);
});

console.log('Promise');

在控制台上,可以看到输出结果 QQ截图20210314094523.png

Promise在创建之后会立即执行,resolve、reject 标记promise状态之后并不会阻止后续方法继续进行,但 promise在状态发生变化之后就不会再改变,所以,再 resolve 标记成功之后, reject不起作用