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回调数据