-1

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

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

关键是,不使用 text() 我最终无法获取数据,而是以已解决的承诺结束

4

2 回答 2

3

.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()来获得相同的结果。

阅读更多关于响应体方法textjson.

于 2020-01-09T14:57:34.450 回答
2

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

于 2020-01-09T14:50:55.287 回答