async是异步操作的关键字,是generator函数的语法糖,具体语法呢:
async function 函数名称( 参数名称 ){函数体},来举个栗子:
1.1这里返回的是一个promise对象:
Promise 对象只有:从 pending 变为 fulfilled 和从 pending 变为 rejected 的状态改变。只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolved(已定型)。
async function helloAsync(){
return "helloAsync";
}
console.log(helloAsync()); //Promise { 'helloAsync' }
helloAsync().then( v=>{
console.log(v); //helloAsync
})
1.2函数内有await表达式
当然函数里会有await表达式,当函数执行的时候遇到await会暂停执行,等到异步操作完毕后,继续进行解析,也就是可以把它看做一个等待器,就比如盖房子一样先弄好门窗,再进行刷漆,如果有await那么它先执行,举个栗子:
// await测试
function Await() {
console.log("遇到await啦,请等待...");
return new Promise((resolve) =>{
setTimeout(function(){
console.log("Await执行完毕");
resolve();
},10000)
})
}
// async
async function helloAsync(){
await Await();
console.log("你好async");
}
helloAsync();
执行中
执行完毕
当然await只在async function里有效,如果在函数体外面的话会报错
1.3
await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用。返回Promise对象的处理结果,如果等待的不是Promise对象,则返回本身。举个栗子:
function Await(x){
return new Promise(resolve =>{
setTimeout(() =>{
resolve(x)
},2000)
});
}
async function helloAsync(){
var x = await Await('你好await');
console.log(x);
}
// 调用
helloAsync();
这里呢会执行Await 有2s的等待时间 setTimeout(),当然await后面跟着Promise对象,其后也可以跟普通函数,字符串等。
function testAwait(){
console.log(testAwait);
}
async function helloAsync(){
await testAwait(); //
console.log(helloAsync());
//[Function:testAwait]Promise{ <pending> } 无限循环知道pending状态转换为fuliflled状态停止
}
helloAsync();
testAwait();