| 227 | } |
| 228 | |
| 229 | function finishImpl(err, final) { |
| 230 | if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE' || error.name === 'AbortError')) { |
| 231 | error = err; |
| 232 | } |
| 233 | |
| 234 | if (!error && !final) { |
| 235 | return; |
| 236 | } |
| 237 | |
| 238 | while (destroys.length) { |
| 239 | destroys.shift()(error); |
| 240 | } |
| 241 | |
| 242 | disposable?.[SymbolDispose](); |
| 243 | ac.abort(); |
| 244 | |
| 245 | if (final) { |
| 246 | if (!error) { |
| 247 | lastStreamCleanup.forEach((fn) => fn()); |
| 248 | } |
| 249 | process.nextTick(callback, error, value); |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | let ret; |
| 254 | for (let i = 0; i < streams.length; i++) { |