3

我正在尝试使用 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]. 有谁知道我如何获得回复的正文?

4

3 回答 3

3

TL;博士

(-> (.fetch js/window "https://api.github.com/users/seisvelas/gists")
  (.then #(.json %))  ; Get JSON from the Response.body ReadableStream
  (.then #(.log js/epi %))

是我要写的


data.body()从 ClojureScript 中,可以调用类似的 JavaScript调用

(.body data)

和一个 JavaScript 属性访问data.body,如

(.-body data)

其中之一应该适用于您的情况。但是,如果您想从 body 获取 JSONfetch , API 需要更多,我假设您是基于端点进行的。

如果您正在处理承诺链,您可能还需要考虑使用->(thread-first) 以便它从上到下读取。

有关线程化承诺链的更多信息,请参阅此 Gist

于 2019-11-05T01:09:41.100 回答
2

有一个名为lamdaisland.fetch的库包装了 js fetch API 。该库使用传输作为默认编码格式,因此在使用 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)))
于 2021-07-22T08:44:18.540 回答
0

似乎 .fetch 返回一个 Response 对象,您需要从中获取body主体的属性。https://developer.mozilla.org/en-US/docs/Web/API/Response

就像是(.body data)

于 2019-11-01T21:24:50.883 回答