关于Promise案例
setTimeout(function() {
var a = 'aaa'
setTimeout(function() {
var b = 'bbb'
setTimeout(function() {
var c = 'ccc'
console.log(a + b + c)
}, 10);
}, 10);
}, 10);
使用Promise来进行改进
then的参数是 上一个回调的结果
new Promise(resolve=>{
var a='aaa';
setTimeOut(()=>{
resolve(a);
},10)
}).then(vA=>{
var b= 'bbb';
return value+b;
}).then(vB=>{
var c="ccc";
return vB+c;
})
当然除此之外还可以使用Async Await
//将定时器放到一个Promise对象函数中
function promise(str) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(str)
}, 10)
})
}
async function showStr() {
let a = await promise('aaa')
let b = await promise('bbb')
let c = await promise('ccc')
console.log(a + b + c)
}
showStr()
Promise小知识
1 Promise有三种状态 fulfilled(成功) rejected(失败) Pending(等待)
状态的变化只能从等待变为成功或者失败 确定之后状态不能再发生改变
2 Promise有两个参数成功接收(resolve) 失败(reject)接收. then执行回调 链式调用
3 Promise中的catch一般常用来捕获错误 then捕获错误会一直向下传递直到结束 catch 会立即捕获
4 Promise中的finally方法 resolve reject都可以执行
回调没有参数
返回一个Promise对象且可以向下传递
5 Promise.all 入参是一个数组 只要有一个为rejec 就会返回rejec 所有的值都都完成才能resolve 返回一个Promise对象
6 Promise.race 只要有一个resolve 或者reject 便更改返回Promise的状态
返回一个Promise对象