async&await是Promise和Generator的語法糖,使用他的目的就是用同步的寫法,寫異步的操作
async 是“異步”的簡寫, async 用于申明一個異步的 function
await 可以認為是 async wait 的簡寫,await 用于等待一個異步方法執行完成,
一、async
1.async可以作用在任何方法前, 回傳值是一個Promise物件
async function a(){
}
console.log(a());//Promise {<fulfilled>: undefined}
var b = (async () => {
})
console.log(b());//Promise {<fulfilled>: undefined}
2.async函式內部return的回傳值, 會成為then回呼函式的引數
async function a() {
return 12
}
a().then(res=>{
console.log(res);
})
3.async作用的方法,如果內部出現報錯,可以被promise的catch方法捕獲
async function a() {
console.log(a);
let a = 10;
}
a().catch(err=>{
console.log(err);//Cannot access 'a' before initialization
})
4.常規使用,一般都會通過try catch進行有可能報錯的代碼處理
async function a() {
try {
console.log(a);
let a = 10;
} catch (error) {
console.log(error);//Cannot access 'a' before initialization
}
}
a()
二、await
1.await只能作用在async修飾的方法中,不能單獨使用,如果使用報錯
function a(){
await //error:await is not defined
console.log(1);
}
a()
2. 正常情況 await后面跟著一個Promise物件; 回傳的是Promise物件的成功后結果
async function a(){
var b = await new Promise((resolve,reject)=>{
resolve('111')
})
return b
}
a().then(res=>{
console.log(res);//111
})
3.阻塞后的代碼
async function a() {
await one(1000,1)
await one(2000,2)//列印數字2的時候距離打開頁面過去了3秒
}
a()
function one(time,num){
return new Promise((resolve,reject)=>{
setTimeout(() => {
console.log(num);
resolve(num)
}, time);
})
}
未阻塞的代碼
function a() {
setTimeout(() => {
console.log(1);
}, 1000)
setTimeout(() => {
console.log(2);
//列印出數字2,用了2秒,代碼是并行的并未阻塞
}, 2000)
}
a()
結束,同志們再見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/305466.html
標籤:其他
上一篇:TensorFlow 從入門到精通(9)—— 模型保存與恢復以及TensorFlow游樂場、Tensorboard
下一篇:ES6-塊級作用域
