aysnc-await是promise的一种特殊语法,它可以更简洁的得到promise
aysnc function
aysnc 放在函数前定义函数,它规定了这个函数的返回值一定为promise,
// 通过new新建一个promise(旧)
// let p = new Promise(function(resolve,reject){
// //执行一个操作
// });
// 通过async得到一个promise(新)
async function sum(){
return 1;// 等同于 retrun Promise.resolve(1);
}
console.log(sum());
在函数前面的 “async” 表达了一个简单的事情:《即这个函数总是 "返回" 一个 promise。》
await
await只能用在aysnc的函数内,它会中断函数的执行,等待promise的完成再继续向下执行函数
// await用法,写在promise前表示等待promise结果
let result = await p; // p为一个promise,
// 此时result的值为promise的结果,而不是这个promise p
这里await会等待p执行结束再给result进行赋值,
async function f(){
let p = new Promise((resolve,reject)=>{
setTimeout(()=>resolve("pending,等待promise"),2000) ;
})
let result = await p; // 等待,直到 promise resolve (*)
console.log(result);
}
f();
2秒后得到promise结果,而不是直接返回promise
await会等待promise的结果,在进行操作(这里是赋值),类似于p.then()
总结
aysnc 关键字用在函数前,保证函数返回的结果得到一个promise;await用在aysnc内的promise前,它会等待promise的结果再向下执行用函数