為了使我們的非同步**,更像同步的**
用法:首先在 function 前面加 async 用來說明這個函式是乙個非同步函式
然後在async裡面寫await
await等待當前async function語句內部語句的執行 await接受promise返回的成功或者失敗的內容,若沒有返回值則不繼續向下執行
async
functionfn(
)fn()
console.
log(
'b')
//a//b
functionfn(
))}async
functionf1(
)f1()
console.
log(3)
//1//3
functionfn(
)).then
(function
(a),
function
(a))
}async
functionf1(
)f1()
console.
log(3)
;//1
//3//4
//2
async
function
a(y)
function
b(x,y)a(
10)
使用promises
,非同步函式有兩個可能的返回值:已解析的值和被拒絕的值。我們可以.then()
用於正常情況,.catch()
用於特殊情況。
async
function
a(y)
catch
(err)
}function
b(x,y)a(
10,)
function
getimage
(src);}
);}async
function
loadimages()
)return arr;
}var p=
loadimages()
; p.
then
(function
(arr)
)
非同步任務分為固定時間任務和非固定時間任務(載入檔案和載入檔案,ajax通訊)
而巨集任務和微任務是固定時間的非同步任務安排
事件拋發都是同步及時觸發 的
巨集任務裡面的微任務比微任務裡的巨集任務優先
微任務裡的微任務比微任務優先
案例:
promise.
resolve()
.then
(function()
,0)}
)settimeout
(function()
)},0
)
**執行過程:
1 使用promise
function
setlight
(light, time =
1000))
}, time)
}function
showlight()
).then
(function
(light)).
then
(function
(light))}
showlight()
;
2 使用async,await
function
setlight
(light, time =
1000))
}, time)
}async
function
showlight()
);}showlight()
;}showlight()
;
new
promise
(function
(res));
newpromise
(function
(res)).
then
(function()
);console.
log(0)
;//-----2})
.then
(function()
);})
.then
(function()
);promise.
resolve()
.then
(function()
);})
;settimeout
(function()
,0);
promise.
resolve()
.then
(function()
);},
0);settimeout
(function()
,0);
console.
log(1)
;new
promise
(function
(res, rej)).
then
(function()
);settimeout
(function()
,0);
},0)
;});
}).then
(function()
);settimeout
(function()
).then
(function()
);})
; promise.
resolve()
.then
(function()
);console.
log(13)
;},0
);})
;settimeout
(function()
);console.
log(15)
;},0
);console.
log(16)
;},0
);console.
log(17)
;},0
);console.
log(18)
;new
promise
(function
(res),0
);})
;
async與await以及巨集微任務
乙個正在努力愛好運動的程式猿 座右銘 越努力越幸運,越運動越健康,熱愛程式設計,熱愛運動。async functionf f promise f then function res async functionf f then res console.log 1 1 1234 await await...
非同步和等待 async和await
在.net 4.5中,通過async和await兩個關鍵字,引入了一種新的基於任務的非同步程式設計模型 tap 在這種方式下,可以通過類似同步方式編寫非同步 極大簡化了非同步程式設計模型。如下式乙個簡單的例項 static async void downloadstringasync2 uri ur...
async和await的講解
普通的函式宣告 async function a 複製 宣告乙個函式表示式 let a async function 複製 async形式的箭頭函式 let a async 複製 async與await例項應用,基礎 控制器呼叫與server中查詢資料 exports.getbloglist asy...