promise对象(简单理解)
function test(){
return Promise((resolve,reject)=>{
//异步处理
成功 执行 resolve 并且传递参数
失败执行 reject 传递参数
})
}
1.promise 对象可以链式调用 可以有很多个then只用一个catch
2.如果需要链式调用 需要在上一个then 返回一个promise对象
3.千万不要出现在then里面写then(话不多说 代码走起)
初始状态(回调地狱 )
function fun1(){
setTimeout(()=>{
console.log(1)
setTimeout(()=>{
console.log(2)
setTimeout(()=>{
console.log(3)
},500)
},1000)
},1500)
}
fun1();
解决方案:
function fun1(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(1)
if(true){
resolve('ok1')
// 成功执行 reslove 可以触发外部的then 方法
}else{
reject('err1')
// 失败执行 reject 可以触发外部的catch 方法
}
},1000)
})
}
function fun2(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(2)
if(true){
resolve('ok2')
}else{
reject('err2')
}
},500)
})
}
function fun3(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(3)
if(true){
resolve('ok3')
}else{
reject('err3')
}
},800)
})
}
fun1().then((data)=>{
console.log(data)
return fun2()
})
.then((data)=>{
console.log(data)
return fun3()
})
.then((data)=>{
console.log(data)
})
.then(()=>{
console.log('德玛西亚万岁')
})
.catch((err)=>{
console.log("sorry")
})