diff --git a/internal/readablestream/reader.go b/internal/readablestream/reader.go index 854f6fd..1842d4d 100644 --- a/internal/readablestream/reader.go +++ b/internal/readablestream/reader.go @@ -14,7 +14,7 @@ type Reader struct { off int } -var _ io.Reader = (*Reader)(nil) +var _ io.ReadCloser = (*Reader)(nil) func NewReader(r safejs.Value) *Reader { return &Reader{ @@ -83,3 +83,14 @@ func (r *Reader) Read(p []byte) (int, error) { return n, nil } + +func (r *Reader) Close() error { + p, err := r.value.Call("cancel") + if err != nil { + return err + } + + _, err = promise.Await(safejs.Unsafe(p)) + + return err +} diff --git a/request.go b/request.go index c8e82e8..4818aa0 100644 --- a/request.go +++ b/request.go @@ -34,7 +34,7 @@ func Request(uvalue js.Value) (*http.Request, error) { return nil, err } - var bodyReader io.Reader + var bodyReader io.ReadCloser if !body.IsNull() { // WORKAROUND: Firefox does not have request.body ReadableStream @@ -66,7 +66,7 @@ func Request(uvalue js.Value) (*http.Request, error) { req := &http.Request{ Method: method, URL: u, - Body: io.NopCloser(bodyReader), + Body: bodyReader, Header: make(http.Header), }