promise主要是为了解决异步编程,传统方式一般回调函数事件驱动
比如说这么一段函数
function fun(a){
setTimeout(()=>{
a&&a();
},1000);
}
func(()=>{
console.log(1);
func(()=>{
console.log(2);
func(()=>{
console.log(3);
func(()=>{
console.log(4);
func(()=>{
console.log(5);
});
});
});
});
});
每隔1s输出一个数
1
2
3
4
5
现在用promise试试
function fun2(){
return new Promise((resolve,reject)=>{//resolve是成功做的事情,reject是失败做的事情
setTimeout(()=>{
resolve();
},1000);
});
}
func2().then(()=>{
console.log(1);
return func2();
}).then(()=>{
console.log(2);
return func2();
}).then(()=>{
console.log(3);
return func2();
}).then(()=>{
console.log(4);
return func2();
}).then(()=>{
console.log(5);
return func2();
});
每隔1s输出
1
2
3
4
5
和上面一起就是
1
1
2
2
3
3
4
4
5
5
比起第一种一层一层嵌套,promise这种链式更加清晰
然后我们看看怎么用它的两个参数
let a=10;
let promise = new Promise(function(resolve,reject){
if(a==10){
resolve("成功“);
}else{
resolve("失败“);
}
});
//promise.then(succ,fail)
promise.then(res=>{
console.log(res);
},err=>{
console.log(err);
})
err还有一种写法promise.catch()
promise.catach(err=>{
console.log(err);
})
所以也可以这么写:
new Promise().then(res=>{
},catch(err=>{
}))