异步async
async
用来处理异步,它是对 Promise 的一种扩展,让异步更加方便;async 是基于 Promise 的,虽然是异步操作,但看上去像同步,更容易理解。
let p1=new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve("异步1"); },3500); }); let p2=new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve("异步2"); },800); }); let p3=new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve("异步3"); },1500); });
语法:在函数前加 async 关键字即可
await 关键字:async 函数中有一个 await 关键字,用于等待一个 Promise 对象,即在async 函数执行时,如果遇到 await 就会先暂停执行 ,等到触发的异步操作完成后,再恢复 async 函数的执行并返回解析值。
注:await 关键字仅在异步函数 async function 内部有效。如果在 async function 函数体外使用 await ,你只会得到一个语法错误。
let as=async()=>{ let result=await p1; console.log(result); } as(); //异步1
async function as(){ let result=await p1; console.log(result); } as(); //异步1
async在进行多个异步时,可以不使用 .then,更清晰
.then:
p1.then(val=>{ console.log(val); return p2; }).then(val=>{ console.log(val); return p3; }).then(val=>{ console.log(val); })
async:
async function as(){ let r1=await p1, r2=await p2, r3=await p3; console.log(r1); console.log(r2); console.log(r3); } as();

提供了类似 Promise.all() 方法:
async function as(){ let all=[await p1,await p2, await p3]; console.log(all); } as();
![]()
async函数如果设返回值,返回的会是一个Promise对象,可以使用 then 方法进行下一步操作。return 语句返回的值,会成为 then方法回调函数 resolve 的参数。
// 返回值是Promise对象 // 相当于 Promise.resolve() async function as(){ return "async"; } console.log(as());
as().then(val=>{
console.log(val);
})
![]()
如果 return 返回的是 await Promise 对象,若要得到返回值,直接调用方法是不可行的,会提前返回pending状态,
async function as(){ return await p1; } //或 async function as(){ let r=await p1; return r; }
console.log(as());
这个时候如果想要输出值,还是需要使用 .then
as().then(val=>{ console.log(val); });


浙公网安备 33010602011771号