async await主要功能可以简化Promise then写法,代码更简洁。
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。
当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
await命令只能用在async函数之中。
例子,用Promise then实现:
function f1(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
console.log('f1');
resolve('f1回调数据');
}, 2000);
});
return p;
}
function f2(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
console.log('f2');
resolve('f2回调数据');
}, 1000);
});
return p;
}
f1().then(function(data){
console.log(data);
return f2();
}).then(function(data){
console.log(data);
});
输出:
f1
f1回调数据
f2
f2回调数据
把上面的then改为用async await实现,输出结果一样:
async function test(){
var r1 = await f1();
console.log(r1);
var r2 = await f2();
console.log(r2);
}
test();
f1和f2是继发关系,f2要等f1完成后才会执行。
如果两者不存在依赖关系,要同时执行,可以改成下面:
async function test(){
var [r1,r2] = await Promise.all([f1(),f2()]);
console.log(r1);
console.log(r2);
}
test();
或者:
async function test(){
var f1p = f1();
var f2p = f2();
var r1 = await f1p;
var r2 = await f2p;
console.log(r1);
console.log(r2);
}
test();
输出:
f2
f1
f1回调数据
f2回调数据