httpurr icon indicating copy to clipboard operation
httpurr copied to clipboard

node client does not reject promise on unsucessful request

Open martinklepsch opened this issue 3 years ago • 2 comments

(require '[httpurr.client.node :as node])
(require '[promesa.core :as p])

(defn decode
  [response]
  (update response :body #(js->clj (js/JSON.parse %))))

(defn get!
  [url]
  (p/then (node/get url) decode))

This is an example from the docs. In contrast to the client/send! function this won't automatically reject the promise if the request failed. Edit, it seems that even when using client/send! and passing the node client a 400 HTTP code does not cause the promise to be rejected. I'm wondering if this should be considered a bug or if using client specific send! functions should be discouraged / removed from the docs?

I find this behavior is probably worth fixing as the documentation describes multiple ways of making requests with different error handling semantics.

From the docs

send! is a function that, given a request map and optionally a map of options, performs the request and returns a promise that will be resolved if there is a response and rejected on timeout, exceptions, HTTP errors or aborts.

martinklepsch avatar Apr 26 '22 13:04 martinklepsch

Bump :) Is this something you'd consider a PR for? I guess it's somewhat problematic to fix as it would break a lot of clients but maybe we could introduce a node-next namespace with a more strict behavior?

martinklepsch avatar Nov 02 '22 15:11 martinklepsch

sorry, but I don't have time for it right now If you wan't to help of taking care of this project, i'm gladly give you commit access to it.

niwinz avatar Nov 08 '22 10:11 niwinz