async function getTitle(){ return "标题" }如果直接调用这个函数并打印返回值,则会输出:
Promise{<fulfilled >: "标题"}
如果想要访问返回值,则需要像 Promise 一样使用 then(),代码如下:getTitle().then(title=>console.log(title));除此之外,在异步函数中可以使用 await 关键字获取其他 Promise 或异步函数的执行结果。
const promise=new Promise(resolve=>setTimeout(resolve,3*1000,"done")); async function logResult(){ const result=await promise; console.log(result); } logResult();代码中定义了一个 promise,在 3s 后打印出"done"字符串,之后在一个 async 函数 logResult() 中,使用了 await 等待 promise 的执行结果,并打印出来,代码的最后直接调用了 logResult() 这个 async 函数,它没有返回值,所以不需要在后边使用 then()。 运行代码并等待 3s 后,控制台就会打印出"done"。
promise.then(result=>console.log(result));只不过使用 await 这种方式更符合同步代码的风格。
async function getPosts(){ const res=await fetch("/api/posts"); const posts=await res.json(); return posts; } getPosts().then(posts=>console.log(posts));代码最后同样会打印出获取的文章列表数组,不过这里可以看到,之前使用了两个 then() 分别获取 res 对象和 posts 数组,而这里使用 await 则更像是同步的代码,且两个 await 是按顺序执行的。
async function execPromises(){ await promise1; await promise2; const value3=await promise3; return value3; } execPromises().then(value=>console.log(value));这里最后打印出的结果同样也是 promise3 的返回值:1。
await Promise.all([promise, asyncFunc1(), asyncFunc2()])
async function getPosts(){ try{ const res=await fetch("/api/posts"); if(res.status>=400){ throw res.status; } const posts=await res.json(); return posts; }catch(error){ if(error===404){ return[]; }else{ console.log(error); } } } getPosts().then(posts=>console.log(posts));如果响应状态码是 404,则 getPosts() 会返回空数组,其他状态码则直接使用 console.log() 打印了出来。
本文链接:http://task.lmcjl.com/news/4665.html