在koa2框架我们经常能看到async和await,我当时第一次见,想我艹这是个啥东西。
从平时的js里开始看,因为它时基于es6Promise的写法
function pro(){
return '嘿嘿嘿'
}
console.log(pro()) // 嘿嘿嘿
async function pro(){
return '嘿嘿嘿'
}
console.log(pro()) // 下图
pending是这个Promise当前的状态
加载结束后的样子
可以看到async把一个普通的function转化为Promise对象,Promise的出现就是为了实现异步
function setTime(time){ // 返回一个promise对象来控制异步
var Time = new Promise(function(resolve,reject){
setTimeout(function(){
resolve(time) // 假如不用promise对象在这个setTime中直接return
// 这this指向问题无法解决这个函数不知道什么时候返回,返回给谁promise中resolve解决了这个问题,它可以用then接收
},time)
});
return Time;
}
async function pro(){
var now1 = Date.now();
console.log(setTime(3000).then(data=>{console.log(data)})); // 因为是promise可以用then
console.log(Date.now() - now1);
return Date.now() - now1;
}
console.log(pro().then(data=>{console.log(data)}))
await的作用
await就是同步必须和async一起使用
function setTime(time){
var Time = new Promise(function(resolve,reject){
setTimeout(function(){
resolve(time)
},time)
});
return Time;
}
async function pro(){
var now1 = Date.now();
// 这里
await setTime(3000).then(data=>{console.log(data)}); // 修改了这里
console.log(Date.now() - now1);
return Date.now() - now1;
}
console.log(pro().then(data=>{console.log(data)}))
可以看出我在setTime前写了await,它作用就是我没执行接受(或者说是我没有返回结果,状态还没有确定)会阻断后面程序的运行