如何获取 ClojureScript 中 fetch API 返回的 Response 对象的正文文本?
How to I get the body text of a Response object returned by the fetch API in ClojureScript?
我正在尝试使用 Github Gist API 来获取我所有 Gist 的列表,如下所示:
(ns epi.core)
(.then (.fetch js/window "https://api.github.com/users/seisvelas/gists")
(fn [data] (.log js/epi data)))
js/epi
只是 console.log
除了我正在使用的博客平台提供的 (epiphany.pub)。
当我从 curl 调用 API 时,它工作正常;然而,当在 cljs 中完成而不是给我响应的主体时,这给了我 [object Response]
。有谁知道我怎样才能得到回复的正文?
似乎 .fetch returns 是一个 Response 对象,您需要从中获取正文的属性 body
。 https://developer.mozilla.org/en-US/docs/Web/API/Response
类似于(.body data)
TL;DR
(-> (.fetch js/window "https://api.github.com/users/seisvelas/gists")
(.then #(.json %)) ; Get JSON from the Response.body ReadableStream
(.then #(.log js/epi %))
是我要写的
在 ClojureScript 中,JavaScript 调用如 data.body()
可以用
调用
(.body data)
和 JavaScript 属性 像 data.body
和
一样的访问
(.-body data)
其中一个应该适用于您的情况。然而,fetch
API 如果你想 get JSON from the body 需要多一点,我假设你是基于端点做的。
如果您正在处理 promise 链,您可能还想考虑使用 ->
(线程优先)以便它从上到下读取。
有关线程承诺链的更多信息,请参阅 this Gist。
有一个名为 lamdaisland.fetch 的包装 js fetch API 的库。本库使用 transit 作为默认编码格式,因此在使用 github API.
时需要指定接受格式
此库包含 kitchen-async.promise
作为其依赖项,因此您可以在 ClojureScript 源代码中要求 kitchen-async.promise。
(ns fetch.demo.core
(:require [kitchen-async.promise :as p]
[lambdaisland.fetch :as fetch]))
(p/try
(p/let [resp (fetch/get
"https://api.github.com/users/seisvelas/gists"
{:accept :json
:content-type :json})]
(prn (:body resp)))
(p/catch :default e
;; log your exception here
(prn :error e)))
我正在尝试使用 Github Gist API 来获取我所有 Gist 的列表,如下所示:
(ns epi.core)
(.then (.fetch js/window "https://api.github.com/users/seisvelas/gists")
(fn [data] (.log js/epi data)))
js/epi
只是 console.log
除了我正在使用的博客平台提供的 (epiphany.pub)。
当我从 curl 调用 API 时,它工作正常;然而,当在 cljs 中完成而不是给我响应的主体时,这给了我 [object Response]
。有谁知道我怎样才能得到回复的正文?
似乎 .fetch returns 是一个 Response 对象,您需要从中获取正文的属性 body
。 https://developer.mozilla.org/en-US/docs/Web/API/Response
类似于(.body data)
TL;DR
(-> (.fetch js/window "https://api.github.com/users/seisvelas/gists")
(.then #(.json %)) ; Get JSON from the Response.body ReadableStream
(.then #(.log js/epi %))
是我要写的
在 ClojureScript 中,JavaScript 调用如 data.body()
可以用
(.body data)
和 JavaScript 属性 像 data.body
和
(.-body data)
其中一个应该适用于您的情况。然而,fetch
API 如果你想 get JSON from the body 需要多一点,我假设你是基于端点做的。
如果您正在处理 promise 链,您可能还想考虑使用 ->
(线程优先)以便它从上到下读取。
有关线程承诺链的更多信息,请参阅 this Gist。
有一个名为 lamdaisland.fetch 的包装 js fetch API 的库。本库使用 transit 作为默认编码格式,因此在使用 github API.
时需要指定接受格式此库包含 kitchen-async.promise
作为其依赖项,因此您可以在 ClojureScript 源代码中要求 kitchen-async.promise。
(ns fetch.demo.core
(:require [kitchen-async.promise :as p]
[lambdaisland.fetch :as fetch]))
(p/try
(p/let [resp (fetch/get
"https://api.github.com/users/seisvelas/gists"
{:accept :json
:content-type :json})]
(prn (:body resp)))
(p/catch :default e
;; log your exception here
(prn :error e)))