promise语法糖-async,await
promise:Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值.
语法async
async function name() { statements }
async作用
- 一个async函数能够包含0个或者多个await指令(await指令能够在停止异步函数执行,等待promise函数执行,并继续异步函数的执行并返回解析后的promise)
- async函数返回值是一个promise对象(即使不是一个promise对象,也会成为一个隐式promise对象)
async function foo() {
return 1
}
等价于
function foo() {
return Promise.resolve(1)
}
async function foo() {
throw 1
}
等价于
function foo() {
return Promise.reject(1)
}
语法await
[return_value] = await expression;
expression:promise对象或者任何想要返回的值
return_value:返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。
例子
如果一个 Promise 被传递给一个 await 操作符,await 将等待 Promise 正常处理完成并返回其处理结果。
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
如果该值不是一个 Promise,await 会把该值转换为已正常处理的Promise,然后等待其处理结果。
async function f2() {
var y = await 20;
console.log(y); // 20
}
f2();
如果 Promise 处理异常,则异常值被抛出。
async function f3() {
try {
var z = await Promise.reject(30);
} catch (e) {
console.log(e); // 30
}
}
f3();