promise的学习笔记
Promise基本使用
// promise是一个构造函数,参数是一个函数,函数里面有俩个形参,一个是 resolve解决,reject拒绝,俩个都是函数类型的数据,promise可以包裹一个异步操作
1
2
3
4
5
6
7
8
9
10btn.addEventListener('click',function(){
// promise是一个构造函数,参数是一个函数,函数里面有俩个形参,一个是 resolve解决,reject拒绝,俩个都是函数类型的数据,promise可以包裹一个异步操作
const p = new Promise((resolve,reject)=>{
setTimeout(()=>{
})
}
)
})
promise常用API
then 接下来(指定回调)
1
2
3
4
5
6
7 //调用 then
p.then(value=>{
console.log(value.toString());
}, reason=>{
console.log(reason);
});
chach 捕获(捕获失败的方法,并可以接受一个形参)
1
2
3
4
5
6
7
8
9
10
11
12
13
14let p = new Promise((resolve, reject) => {
// ** 同步调用
// console.log(111);
//修改 promise 对象的状态
reject('error');
});
// console.log(222);
//执行 catch 方法
// p.catch(reason => {
// console.log(reason);
// });
// 抛出异常
resolve 成功( //如果传入的参数为 非Promise类型的对象,
则返回的结果为成功promise对象
//如果传入的参数为 Promise 对象, 则参数的结果决定了 resolve 的结果)
1 | // |
reject 失败
1 | // 作用:放回一个失败的原因 |
Promise.all方法
作用:返回一个新的promise,全真则真,一假既假
1 | let p1 = new Promise((resolve, reject) => { |
Promise.race(竞赛)方法
说明:放回一个新的promise,第一个完成的promise的结果状态就是他最终的结果
1
2
3
4
5
6
7
8
9
10
11
12let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('OK');
}, 1000);
})
let p2 = Promise.resolve('Success');
let p3 = Promise.resolve('Oh Yeah');
//调用
const result = Promise.race([p1, p2, p3]);
console.log(result);
Promise几个关键问题
修改Promise的状态有几种方式
三种方式
在构造函数中直接调用 resolve 函数
在构造函数中直接调用 reject 函数
在构造函数中直接抛出错误:throw Error
1
2
3
4
5
6
7
8
9
10let p = new Promise((resolve, reject) => {
//1. resolve 函数
// resolve('ok'); // pending => fulfilled (resolved)
//2. reject 函数
// reject("error");// pending => rejected
//3. 抛出错误
// throw '出问题了';
});
console.log(p);
一个Promise指定多个成功/失败的回调函数,都会调用吗?
都会执行!
1 | let p = new Promise((resolve, reject) => { |
改变Promise状态和指定回调函数谁先谁后
问题简化:Promise代码运行时,resolve先执行还是then先执行
1 | // 两种情况都有可能 |
then()方法返回的Promise的对象的状态由什么决定
1 | 简单表达:then()方法返回的Promise的对象的状态由什么决定 |
