当await后面是Promise时,执行异步操作,也就是先执行函数外面后面的语句,等到异步操作完成再执行函数内部后面的语句,函数返回Promise对象,最后执行then方法指定的动作,当await后面非Promise对象时,作为同步操作执行,下面是例子:
function timeout(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function asyncPrint(ms){
await console.log('非promise对象');
await timeout(ms);
console.log('async1 complete');
await timeout(ms);
console.log('async2 complete');
}
asyncPrint(2000).then(()=>{console.log('函数返回');});
console.log('外部语句');
"async
函数内部return
语句返回的值,会成为then
方法回调函数的参数"
"async
函数内部抛出错误,会导致返回的 Promise 对象变为reject
状态。抛出的错误对象会被catch
方法回调函数接收到"
可用await Promise.all()实现异步操作的同时触发
asyn函数的实现原理是返回一个自动遍历Generator函数(作为参数传入)内部状态的Promise。
带引号的内容直接引自原文: http://es6.ruanyifeng.com/#docs/async