Promise的Async/await
async/await是es7推出的一套关于异步的终极解决方案,为什么要说他是终极解决方案呢?因为他实在是太好用了,而且写起来还非常的简单。
什么是async/await呢?可以总结为一句话:async/await是一对好基友,缺一不可,他们的出生是为Promise服务的。可以说async/await是Promise的进化版。
这两个基友必须同时出现,缺一不可
语法:
-
async function (function return Promise)
函数返回Promise对象
promise对象的结果由async函数执行的返回值决定 -
await expression (value or Promise)
expression一般是Promise对象,也可以是其他值
如果是Promise对象,await返回的是Promise成功的值
如果是其他值,直接将此值作为await的返回值 -
await必须写在async中,但async可以没有await
如果await的Promise失败,就会抛出异常,需通过try…catch…捕获处理
await右侧表达式为Promise,得到的结果就是promise成功的value
await右侧表达式不为Promise,得到的结果就是它本身
function set1() {
return new Promise((r, j) => {
setTimeout(() => {
console.log("3000");
r(333);
}, 3000)
})
}
function set2() {
return new Promise((r, j) => {
setTimeout(() => {
console.log("2000");
r(222);
}, 2000)
})
}
async function fn1() {
const s1 = await set1();
const s2 = await set2();
console.log(s1);
console.log(s2);
}
fn1();
------------------------------------------------------
// 错误处理 - try catch
async function fn5(){
try{
const value = await fn2()
console.log('value', value)
}catch(error){ //捕获失败promise的结果
console.log('error', error)
}
}
fn5()