aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/net/http/roundtrip_js.go35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/net/http/roundtrip_js.go b/src/net/http/roundtrip_js.go
index e14f3f7152..509d229aad 100644
--- a/src/net/http/roundtrip_js.go
+++ b/src/net/http/roundtrip_js.go
@@ -102,12 +102,17 @@ func (t *Transport) RoundTrip(req *Request) (*Response, error) {
js.CopyBytesToJS(buf, body)
opt.Set("body", buf)
}
- respPromise := js.Global().Call("fetch", req.URL.String(), opt)
+
+ fetchPromise := js.Global().Call("fetch", req.URL.String(), opt)
var (
- respCh = make(chan *Response, 1)
- errCh = make(chan error, 1)
+ respCh = make(chan *Response, 1)
+ errCh = make(chan error, 1)
+ success, failure js.Func
)
- success := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
+ success = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
+ success.Release()
+ failure.Release()
+
result := args[0]
header := Header{}
// https://developer.mozilla.org/en-US/docs/Web/API/Headers/entries
@@ -141,35 +146,29 @@ func (t *Transport) RoundTrip(req *Request) (*Response, error) {
}
code := result.Get("status").Int()
- select {
- case respCh <- &Response{
+ respCh <- &Response{
Status: fmt.Sprintf("%d %s", code, StatusText(code)),
StatusCode: code,
Header: header,
ContentLength: contentLength,
Body: body,
Request: req,
- }:
- case <-req.Context().Done():
}
return nil
})
- defer success.Release()
- failure := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
- err := fmt.Errorf("net/http: fetch() failed: %s", args[0].Get("message").String())
- select {
- case errCh <- err:
- case <-req.Context().Done():
- }
+ failure = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
+ success.Release()
+ failure.Release()
+ errCh <- fmt.Errorf("net/http: fetch() failed: %s", args[0].Get("message").String())
return nil
})
- defer failure.Release()
- respPromise.Call("then", success, failure)
+
+ fetchPromise.Call("then", success, failure)
select {
case <-req.Context().Done():
if !ac.IsUndefined() {
- // Abort the Fetch request
+ // Abort the Fetch request.
ac.Call("abort")
}
return nil, req.Context().Err()