mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
cb3020d824
This adds support for error handling in readline.createInterface() for cases where the input object is not supplied, the input stream is invalid, or the underlying buffer emits an error. Now, the 'error' emissions by the readline module are thrown but in order to log those in the specific case of await for loops, we still need to fix silent rejections (TODO added there) inside async iterators for the thenables to work. Fixes: https://github.com/nodejs/node/issues/30831 PR-URL: https://github.com/nodejs/node/pull/31603 Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const fs = require('fs');
|
|
const readline = require('readline');
|
|
const path = require('path');
|
|
|
|
async function processLineByLine_SymbolAsyncError(filename) {
|
|
const fileStream = fs.createReadStream(filename);
|
|
const rl = readline.createInterface({
|
|
input: fileStream,
|
|
crlfDelay: Infinity
|
|
});
|
|
// eslint-disable-next-line no-unused-vars
|
|
for await (const line of rl) {
|
|
/* check SymbolAsyncIterator `errorListener` */
|
|
}
|
|
}
|
|
|
|
const f = path.join(__dirname, 'file.txt');
|
|
|
|
// catch-able SymbolAsyncIterator `errorListener` error
|
|
processLineByLine_SymbolAsyncError(f).catch(common.expectsError({
|
|
code: 'ENOENT',
|
|
message: `ENOENT: no such file or directory, open '${f}'`
|
|
}));
|
|
|
|
async function processLineByLine_InterfaceErrorEvent(filename) {
|
|
const fileStream = fs.createReadStream(filename);
|
|
const rl = readline.createInterface({
|
|
input: fileStream,
|
|
crlfDelay: Infinity
|
|
});
|
|
rl.on('error', common.expectsError({
|
|
code: 'ENOENT',
|
|
message: `ENOENT: no such file or directory, open '${f}'`
|
|
}));
|
|
}
|
|
|
|
// check Interface 'error' event
|
|
processLineByLine_InterfaceErrorEvent(f);
|