节点获取 API | text() 代表什么? (承诺问题)

Node-Fetch API | What is text() stand for? (Promise issue)

谁能确切地告诉我 text() 是做什么的?我看到人们这样使用它,而且它确实有效:

    async getRandomNumber() {
        return await fetch(`${this.url}random`)
            .then((result) => result.text())
            .then((body) => {
                const data = JSON.parse(body);
                console.log(data);
            })
    }

重点是,在不使用 text() 的情况下,我最终无法获取数据,但以已解决的承诺结束

获取结果元素作为文本。还有其他方法,例如 json() 用于获取 JSON 类型的响应。查看 fetch api 文档以获取更多信息。 https://developer.mozilla.org/en-US/docs/Web/API/Response

.text() 方法 returns 承诺,解析为与使用 UTF-8 解码的原始响应文本对应的字符串。

.json() 方法 returns 一个承诺,解析为通过解析响应接收到的对象。通常在响应的内容类型为"application/json"

时使用

让我们假设,http 端点 returns 文本 "hello world" 作为响应。 在那种情况下 .json() 将失败,因为 "hello world" 不能被解析为 JSON.

反过来,如果http端点总是returns一个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"}
            })

P.S。 如果您总是期望响应是一个 json 字符串并且您需要 field/values,那么使用 .text()JSON.parse(data) 是没有意义的,因为您可以简单地使用 .json() 达到相同的结果。

阅读有关响应正文方法的更多信息text and json