diff --git a/lib/fetch/index.js b/lib/fetch/index.js
index <HASH>..<HASH> 100644
--- a/lib/fetch/index.js
+++ b/lib/fetch/index.js
@@ -1676,24 +1676,16 @@ function httpNetworkFetch (
             }
           }
 
-          let iterator
-
           if (decoders.length > 1) {
-            this.decoder = decoders[0]
-            iterator = pipeline(...decoders, () => {})[
-              Symbol.asyncIterator
-            ]()
-          } else if (decoders.length === 1) {
-            this.decoder = decoders[0]
-            iterator = this.decoder[Symbol.asyncIterator]()
-          } else {
-            this.decoder = new PassThrough()
-            iterator = this.decoder[Symbol.asyncIterator]()
+            pipeline(...decoders, () => {})
+          } else if (decoders.length === 0) {
+            // TODO (perf): Avoid intermediate.
+            decoders.push(new PassThrough())
           }
 
-          if (this.decoder) {
-            this.decoder.on('drain', resume)
-          }
+          this.decoder = decoders[0].on('drain', resume)
+
+          const iterator = decoders[decoders.length - 1][Symbol.asyncIterator]()
 
           pullAlgorithm = async (controller) => {
             // 4. Set bytes to the result of handling content codings given
refactor: simplify decoders