| 45 | } |
| 46 | |
| 47 | function getFreePort() { |
| 48 | return new Promise((resolve, reject) => { |
| 49 | const server = net.createServer() |
| 50 | server.once('error', reject) |
| 51 | server.listen(0, '127.0.0.1', () => { |
| 52 | const address = server.address() |
| 53 | if (!address || typeof address === 'string') { |
| 54 | server.close(() => reject(new Error('无法获取可用端口。'))) |
| 55 | return |
| 56 | } |
| 57 | server.close(closeError => { |
| 58 | if (closeError) { |
| 59 | reject(closeError) |
| 60 | return |
| 61 | } |
| 62 | resolve(address.port) |
| 63 | }) |
| 64 | }) |
| 65 | }) |
| 66 | } |
| 67 | |
| 68 | async function waitForJson(url, attempts = 60, delayMs = 500) { |
| 69 | let lastError = null |