MCPcopy
hub / github.com/nodejs/undici / writeIterable

Function writeIterable

lib/dispatcher/client-h1.js:1554–1601  ·  view source on GitHub ↗

* @param {AbortCallback} abort * @param {Iterable} body * @param {import('./client.js')} client * @param {import('../core/request.js')} request * @param {import('net').Socket} socket * @param {number} contentLength * @param {string} header * @param {boolean} expectsPayload * @returns {Promis

(abort, body, client, request, socket, contentLength, header, expectsPayload)

Source from the content-addressed store, hash-verified

1552 * @returns {Promise<void>}
1553 */
1554async function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {
1555 assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')
1556
1557 let callback = null
1558 function onDrain () {
1559 if (callback) {
1560 const cb = callback
1561 callback = null
1562 cb()
1563 }
1564 }
1565
1566 const waitForDrain = () => new Promise((resolve, reject) => {
1567 assert(callback === null)
1568
1569 if (socket[kError]) {
1570 reject(socket[kError])
1571 } else {
1572 callback = resolve
1573 }
1574 })
1575
1576 socket
1577 .on('close', onDrain)
1578 .on('drain', onDrain)
1579
1580 const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })
1581 try {
1582 // It's up to the user to somehow abort the async iterable.
1583 for await (const chunk of body) {
1584 if (socket[kError]) {
1585 throw socket[kError]
1586 }
1587
1588 if (!writer.write(chunk)) {
1589 await waitForDrain()
1590 }
1591 }
1592
1593 writer.end()
1594 } catch (err) {
1595 writer.destroy(err)
1596 } finally {
1597 socket
1598 .off('close', onDrain)
1599 .off('drain', onDrain)
1600 }
1601}
1602
1603class AsyncWriter {
1604 /**

Callers 1

writeH1Function · 0.70

Calls 6

writeMethod · 0.95
endMethod · 0.95
destroyMethod · 0.95
offMethod · 0.80
waitForDrainFunction · 0.70
onMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…