Async 和 Await用法
const assignmentAction = () =>{
const loop = setTimeout(() => {
console.log('111111')
}, 1000);
clearInterval(loop);
}
const output = ()=>{
assignmentAction();
console.log('22222222')
return 0
}
output();
输出结果:
很明显 在执行output方法的时候,assignmentAction()和 console.log(‘22222222’)语句并不是先后执行的,而是一起执行的,换句话说, console.log(‘22222222’)并不会等到assignmentAction方法执行完后在继续执行,所以就会导致我们在调用assignmentAction方法做了数据处理,我们在他的后面去拿assignmentAction执行结果是有可能拿不到的。我们如果想百分百拿到assignmentAction的结果,就需要等待assignmentAction执行完成后在执行后面的逻辑,比如说上面的console.log(‘22222222’),这个时候就需要用到Async 和 Await
const assignmentAction = ()=>{
return new Promise((resolve,reject)=>{
const loop = setTimeout(() => {
console.log('111111')
resolve();
}, 1000);
});
}
const output = async()=>{
await assignmentAction();
console.log('22222222')
}
output();
输出结果:
Promise简单使用
我们也可以,使用Promise的then()方法拿到直接执行结果(Promise((resolve,reject)中的resolve和reject ,分别代表两种状态,resolve 和 reject 函数被调用时,分别将promise的状态改为fulfilled(完成)或 rejected(失败))通俗的讲就是执行成功会通过resolve,失败则通过reject来返回,当然then方法也支持链式(then().then().then())
举个栗子:
const assignmentAction = ()=>{
return new Promise((resolve,reject)=>{
setTimeout(() => {
let num = 5;
if(num < 6){
resolve('成功');
}else{
reject('失败');
}
}, 1000);
});
}
const output = ()=>{
assignmentAction().then(res=>{ // 成功
console.log('结果是:--->',res)
},res=>{ // 失败
console.log('结果是:--->',res)
});
}
output();
const res = new Promise(function(resolve,reject){
if(success){
resolve('返回成功的结果')
}else{
reject('返回失败的结果')
}
})
res.then(function (res) {
// 接收resolve传来的数据)(执行成功后的结果,参考上面的栗子)
},function (err) {
// (执行失败后的结果)
})
res.catch(function (err) {
// 接收reject传来的数据或者捕捉到then()中的运行报错时,做些什么
})
res.finally(function(){
// 不管什么状态都执行
})