javascript - 节点获取 API | text() 代表什么?(承诺问题)
问题描述
谁能告诉我 text() 到底是做什么的?我看到人们这样使用它,而且它确实有效:
async getRandomNumber() {
return await fetch(`${this.url}random`)
.then((result) => result.text())
.then((body) => {
const data = JSON.parse(body);
console.log(data);
})
}
关键是,不使用 text() 我最终无法获取数据,而是以已解决的承诺结束
解决方案
.text()
方法返回一个承诺,解析为与使用 UTF-8 解码的原始响应文本相对应的字符串。
.json()
方法返回一个承诺,解析通过解析响应接收到的对象。通常在响应的内容类型为“application/json”时使用
让我们假设,http 端点返回文本“hello world”作为响应。在那种情况下.json()
会失败,因为“hello world”不能被解析为 JSON。
反过来,如果 http 端点总是返回一个 json,例如:{"text":"hello world"}
,您可以使用这两种方法,但结果会有所不同。例如:
文本
fetch(URL)
.then((result) => result.text())
.then((data) => {
console.log(data); // string `{"text":"hello world"}`
})
json
fetch(URL)
.then((result) => result.json())
.then((data) => {
console.log(data); // object {text:"hello world"}
})
PS 如果您总是期望响应是一个 json 字符串并且您需要字段/值,那么使用.text()
plus是没有意义的,JSON.parse(data)
因为您可以简单地使用.json()
来获得相同的结果。
推荐阅读
- api - 在删除日历之前删除事件 - 无法获取事件
- javascript - JavaScript - 如何在使用 InsertBefore() 重新排序后检索类元素的新索引
- python - lxml 将返回空的 lisy 但 requests_html 将返回想要的结果
- c# - c# wpf - 使用ValueConverter时,MVVM不更新UI?
- .htaccess - 如何将所有子域重定向到域/子域
- python - 是否有一种神奇的方法可以在 python OOP 中创建一个列表对象
- python-3.x - 控件标识符未识别用于保存菜单选项的子窗口
- c - 通配符风格的 C 预处理器技巧
- node.js - 使用 Nodejs 在两个流上的语音到文本
- heroku - 无法访问在 Heroku 平台上正确部署的应用程序(标头示例应用程序)