首页 > 解决方案 > 节点获取 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() 我最终无法获取数据,而是以已解决的承诺结束

标签: javascriptnode.jsapipromisenode-fetch

解决方案


.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.


推荐阅读