Async/Await是ES7中提供的异步方案,首先来看个例子。
var sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, time);
})
};
var start = async function () {
console.log('start');
// 在这里使用起来就像同步代码那样直观
await sleep(3000);
console.log('end');
};
//控制台先输出start,稍等3秒后,输出了end。
基本规则
-
async 表示这是一个异步函数,await只能用在 async函数里面
-
await 表示在这里等待promise返回结果,再继续执行。
-
await 后面跟着的应该是一个promise对象
捕获异常
var sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
reject('error');
}, time);
})
};
var start = async function () {
try {
console.log('start');
await sleep(3000);
// 上面代码捕获到异常,以下代码不会被执行
console.log('end');
} catch (err) {
console.log(err); // 'error'
}
};
循环多个await
//await必须在async函数的上下文中的。
//正确示范
let ten = [1,2,3,4,5,6,7,8,9,10];
for(var v of ten) {
console.log(`当前是第${v}次等待..`);
await sleep(1000); //正确
}
//错误示范
ten.forEach(function (v) {
console.log(`当前是第${v}次等待..`);
await sleep(1000); // 错误!!
});