diff options
| author | ztplz <mysticzt@gmail.com> | 2018-10-22 05:42:18 +0800 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2018-10-21 14:42:18 -0700 |
| commit | c4bddc4651f583241193b80634a4f22abb02d582 (patch) | |
| tree | f70a819bd2bd26b80132f2821943b2e5fffb8861 /js/fetch.ts | |
| parent | 47c96a61527f56aa6dfc5a8fc44b13a1db4f4da5 (diff) | |
Implemente clone for FetchResponse (#1054)
Diffstat (limited to 'js/fetch.ts')
| -rw-r--r-- | js/fetch.ts | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/js/fetch.ts b/js/fetch.ts index 3559f3db8..25db32d1d 100644 --- a/js/fetch.ts +++ b/js/fetch.ts @@ -128,6 +128,7 @@ class FetchResponse implements domTypes.Response { readonly trailer: Promise<domTypes.Headers>; //private bodyChunks: Uint8Array[] = []; private first = true; + private bodyData: ArrayBuffer; private bodyWaiter: Resolvable<ArrayBuffer>; constructor( @@ -138,6 +139,7 @@ class FetchResponse implements domTypes.Response { this.bodyWaiter = createResolvable(); this.trailer = createResolvable(); this.headers = new DenoHeaders(headersList); + this.bodyData = body_; setTimeout(() => { this.bodyWaiter.resolve(body_); }, 0); @@ -175,8 +177,19 @@ class FetchResponse implements domTypes.Response { } clone(): domTypes.Response { - notImplemented(); - return {} as domTypes.Response; + if (this.bodyUsed) { + throw new TypeError( + "Failed to execute 'clone' on 'Response': Response body is already used" + ); + } + + const iterators = this.headers.entries(); + const headersList: Array<[string, string]> = []; + for (const header of iterators) { + headersList.push(header); + } + + return new FetchResponse(this.status, this.bodyData.slice(0), headersList); } onHeader?: (res: FetchResponse) => void; |
