趁热打铁,今天还是promise的问题
问题2、 什么是Promise?promise的作用
1、什么是Promise
Promise 是异步编程的一种解决方案,可以让异步方法像同步方法一样返回值,异步操作不会立即返回最终结果,通过promise则可以立即执行
2、Promise的几种状态
- 待定(pending)* :初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled)* :意味着操作成功完成。
- 已拒绝(rejected)* :意味着操作失败。
状态一旦改变,就不会再变
3、Promise的作用
- 回调地狱:回调函数层层嵌套,首先可读性较差,如果回调函数中有异步任务,会导致函数无法按顺序执行
Promis可以处理多个并发请求
4、Promise的用法
a、构造Promise函数
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('成功回调');
}, 300);
});
注: Promise()只能通过new运算符来构造。如果尝试在没有使用 new 的情况下调用它,会抛出 TypeError 异常。
实例化的promise可以传两个参数:
- resolve :异步操作执行成功后的回调函数
- reject:异步操作执行失败后的回调函数
b、链式操作
通过传递的方式及时进行方法的调用
promise1.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
});
c、resolve和reject的使用
let promise1 = new Promise((resolve, reject) => {
//做一些异步操作
setTimeout(() => {
var num = Math.ceil(Math.random() * 10) //生成1-10的随机数
if (num <= 5) {
resolve(num)
} else {
reject('数字太大了')
}
}, 2000)
})
promise1.then(
(data) => {
console.log('resolved', data)
},
(err) => {
console.log('rejected', err)
}
)
d、catch的用法
用catch捕获异常
promise1
.then((data) => {
console.log('resolved', data)
})
.catch((err) => {
console.log('rejected', err)
})
e、 Promise.all()方法
并行同步和异步操作,所有方法执行完毕后,返回一个包含所有方法返回值的数组
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
暂时就这些,其他相关方法还要慢慢琢磨,欢迎指正
今天结束,继续敲代码了,拜拜大家!!!!!