【问题标题】:Node-Fetch API | What is text() stand for? (Promise issue) [closed]节点获取 API | text() 代表什么? (承诺问题)[关闭]
【发布时间】:2020-04-27 04:55:44
【问题描述】:

谁能告诉我 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
  • @Bergi,为什么不使用 text() 如果它节省了循环和通过 JSON 数据构建 HTML 的开销。这取决于您使用的系统及其提供的数据。
  • @mamounothman — 他们确实使用const data = JSON.parse(body); 作为下一件事。这就是为什么他们不应该使用text()
  • 是的,抱歉,我刚刚注意到,你让我这么做了。

标签: javascript node.js api promise node-fetch


【解决方案1】:

.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"}
            })

附: 如果您总是期望响应是一个 json 字符串并且您需要字段/值,那么使用 .text() 加上 JSON.parse(data) 是没有意义的,因为您可以简单地使用 .json() 来获得相同的结果。

详细了解响应正文方法textjson

【讨论】:

  • 你给我的例子没有用。我创建了一个 API,一旦我将 text() 更改为 json,就会返回 {message: 'delayed by 10'},我收到一个错误:“位置 1 处 JSON 中的意外令牌 o”
  • @Darmon,从我在您的评论中看到,您返回的字符串不是有效的 JSON,因为所有键和字符串值都必须用引号括起来“。尝试返回 {"message":"delayed by 10"} 跨度>
  • 我知道了,谢谢!
【解决方案2】:

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

【讨论】:

  • 您提供的链接中没有关于我的问题的信息。但只有关于 API 响应的方法和属性,无论是通过承诺还是同步。问题是 text() 方法的来源,它是内置的节点获取方法还是 Javascript?因为我只从 jQuery 中知道它
  • 这是一种获取方法。如果您仔细查看我发送的页面,那里有一个名为“方法”的部分,您可以看到可以应用于通过 fetch 获得的响应的不同方法。
猜你喜欢
  • 2017-09-03
  • 2014-03-22
  • 2020-09-02
  • 2017-05-08
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 2019-06-20
  • 2016-12-05
相关资源
最近更新 更多