async是es7新增的关键字,用于定义异步函数。通过async定义的函数返回一个Promise对象,可以通过.then
的形式调用。await是等待 async 的异步执行,而且只能在 async 里面定义。
语法示例
async function myAsync(){
return "async...";
}
console.log(myAsync());//Promise {result:async...}
async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。
async function myAsync(){
return "async...";
}
console.log(myAsync());//Promise {result:async...}
myAsync().then((value) => {
console.log(value);//async...
});
async 函数中可能会有 await 表达式,async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,恢复 async 函数的执行并返回解析值。
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 关键字仅在 async function 中有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。
await
await 通常用于操作一个Promise对象,返回Promise对象的处理结果,如果不是Promise对象,则返回值本身。
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 也可以跟其他值,如字符串,布尔值,数值以及普通函数。
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...