async是es7新增的關(guān)鍵字段化,用于定義異步函數(shù)逛艰。通過(guò)async定義的函數(shù)返回一個(gè)Promise對(duì)象,可以通過(guò).then
的形式調(diào)用哀墓。await是等待 async 的異步執(zhí)行趁餐,而且只能在 async 里面定義。
語(yǔ)法示例
async function myAsync(){
return "async...";
}
console.log(myAsync());//Promise {result:async...}
async 函數(shù)返回一個(gè) Promise 對(duì)象篮绰,可以使用 then 方法添加回調(diào)函數(shù)后雷。
async function myAsync(){
return "async...";
}
console.log(myAsync());//Promise {result:async...}
myAsync().then((value) => {
console.log(value);//async...
});
async 函數(shù)中可能會(huì)有 await 表達(dá)式,async 函數(shù)執(zhí)行時(shí)吠各,如果遇到 await 就會(huì)先暫停執(zhí)行 臀突,等到觸發(fā)的異步操作完成后,恢復(fù) async 函數(shù)的執(zhí)行并返回解析值贾漏。
function testAwait(){
return new Promise((resolve) => {
setTimeout(function(){
console.log("testAwait");
resolve();
}, 1000);
});
}
async function myAsync(){
await testAwait();
console.log("async...");
}
myAsync();
//testAwait
//async...
await 關(guān)鍵字僅在 async function 中有效候学。如果在 async function 函數(shù)體外使用 await ,你只會(huì)得到一個(gè)語(yǔ)法錯(cuò)誤纵散。
await
await 通常用于操作一個(gè)Promise對(duì)象梳码,返回Promise對(duì)象的處理結(jié)果,如果不是Promise對(duì)象伍掀,則返回值本身掰茶。
function testAwait(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 1000);
});
}
async function myAsync(){
let result = await testAwait("testAwait");
console.log(result);
}
myAsync();//testAwait
await 也可以跟其他值,如字符串硕盹,布爾值符匾,數(shù)值以及普通函數(shù)。
function test1(){
console.log("test1...");
}
let myString = "Hello"
async function myAsync(){
let str = await myString+"World";
console.log(str);
await test1();
console.log("myAsync...");
}
myAsync();
//HelloWorld
//test1...
//myAsync...