什么是promise?
- promise是一种异步编程的解决方案。
- promise是一个对象。
- promise分为三个状态。pending (进行) fulfilled (成功) rejected (失败) 。
- promise状态不受外界影响,一旦发生变化,不会再更改。
如何创建promise?
Promise() 函数接收的是一个匿名函数回调
resolve 成功
reject 失败
上面这两个参数都是函数执行。
{
let promise = new Promise(function (resolve, reject) {
let istrue = false;
if (istrue) {
setTimeout(function () {
resolve('数据');
}, 1000);
}
else {
reject('失败');
}
});
then操作。
Promise的精髓是“状态”,用维护状态、传递状态的方式来使得回调函数能够及时调用,它比传递callback函数要简单、灵活的多。
then中传了两个参数,then方法可以接受两个参数,第一个对应resolve的回调,第二个对应reject的回调。
p.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
})
.then((data) => {
console.log(data);
});
这样按顺序传给resolve的数据,能在接下来的then方法中拿到。
catch操作。
catch就是用来捕获异常的,也就是和then方法中接受的第二参数rejected的回调是一样的。
所以一般来说所有错误处理放在catch中,then中只处理成功的,同时catch还会捕捉resolved中抛出的异常。
p.then((data) => {
console.log('resolved',data);
}).catch((err) => {
console.log('rejected',err);
});
all方法。
该方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后并且执行结果都是成功的时候才执行回调。
let Promise1 = new Promise(function(resolve, reject){})
let Promise2 = new Promise(function(resolve, reject){})
let Promise3 = new Promise(function(resolve, reject){})
let p = Promise.all([Promise1, Promise2, Promise3])
p.then(funciton(){
// 三个都成功则成功
}, function(){
// 只要有失败,则失败
})