惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
月光博客
月光博客
博客园_首页
博客园 - 叶小钗
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
量子位
小众软件
小众软件
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
IT之家
IT之家
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

碎言

不懂就别瞎掰掰:【程序员的常识】写的什么玩意? AI 辅助编程下的程序设计与代码编写 使用 Next.js 和 Tailwind CSS 构建可编辑和删除的 ToDo 待办事项应用 探索编程新境界:MarsCode 助你一臂之力 使用 Next.js 和 Tailwind CSS 搭建静态图片展示站点并部署到 Vercel AI 辅助编程:免费工具的优缺点及官网一览 GitHub push更新总是失败,写个python脚本解决 把博客从GitHub迁移到到了vercel ComfyUI 和 Flux.1 安装与使用教程 Flux.1 入门必知:硬件、环境、模型 Git项目的子文件夹中的内容无法同步到远程仓库的解决方法 blender流体Fluid使用中没有流体、流体穿模等一些问题的解决方法 博客聚合网站:积薪,竟然关闭了! blender日常使用中的一些技巧 虽然只有我自己在用,但还是更新了碎言博客的源代码, 与其在迷茫中困惑,不如在努力中前进 差点忘了我还有一个博客... 秧歌、博客和AI 终于熬到了新手上路 好久没有更新博客了。。。 老妈大腿骨骨折,最近一直在医院护理 Hello, September! Ubuntu开机自动启动Docker容器运行WordPress Docker 简单快速安装部署WordPress Docker下安装MySQL 加碘盐能防核辐射的话,还怕什么核战争? shields.io 一个简洁、一致、清晰的徽章 Ubuntu下使用root登录ssh的设置 GitHub Actions 构建、部署 Next.js项目 我又用回了"IE"--edge
async/await和fetch()的使用
J.sky · 2023-05-16 · via 碎言

async和await关键字让我们可以用一种更简洁的方式写出基于 Promise 的异步行为,而无需刻意地链式调用 promise。而FetchAPI可以通过网络访问资源,您可以发出HTTP请求(使用GET和POST其他方法)、下载和上传文件。

Fetch API

Fetch API是一个全局的fetch()方法用于发起获取资源的请求。它返回一个promise,这个promise会在请求响应后被resolve,并传回Response对象。fetch()使用起来很简单,它的语法:

Promise<Response> fetch(input[, init]);

input: URL字符串,或者一个Request对象 options: 具有method, headers, body,credentials等属性的配置对象。

async/await

async/await非常适合与fetch()因为它使用语法糖简化了promises 的工作。

如下代码插入网页中会返回一直可爱的狗狗。

<img id="dog" />
<script>
    async function getDog(){
        const response = await fetch('https://dog.ceo/api/breeds/image/random')
        const dog = await response.json()
        document.getElementById('dog').src = dog.message
    }
    getDog()
</script>

Response对象提供了很多有用的方法:

  • response.json()返回解析为 JSON 对象的承诺
  • response.text()返回解析为原始文本的承诺
  • response.formData()返回已解决的 promise 到FormData
  • response.blob()返回解析为Blob(原始数据的类文件对象)的承诺
  • response.arrayBuffer()()返回解析为ArryBuffer的承诺(原始通用二进制数据)

处理错误

response.ok;     // => false
response.status; // => 404

可以通过response的这二个属性来判断请求是否成功,response.ok最为方便。

async function getDog(){
        const response = await fetch('https://dog.ceo/api/breeds/image/random')
        if(!response.ok){
            throw new Error('请求失败!');
        }
        const dog = await response.json()
        document.getElementById('dog').src = dog.message
    }
getDog().catch(error => {
    error.message; // => '请求失败!'
});

参考:

fetch()

How to Use Fetch with async/await