- await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function。
function fn1(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function fn2() {
var x = await fn1(10);
console.log(x); // 10 x成功获得结果以后再执行console.log(x)语句;
}
fn2();
- 若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。(使用try catch处理异常)
//await只能得到成功的结果,await右边失败的promsie必须使用try、catch
//1.未使用try catch处理失败的promsie
async function f3() {
var z = await Promise.reject(30);
//停止执行
console.log(z);
}
f3();
//2.使用try catch处理失败的promsie
async function f4() {
try {
var z = await Promise.reject(30);
} catch (z) {
console.log(z); // 40
}
}
f4();
- 另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。
async function f2() {
var y = await 20;
console.log(y); // 20
}
f2();