Readstream return 无法处理错误事件,即使它存在
Readstream return cant handle error event even though it is there
这是代码
function read_csv(file_name){
return new Promise((resolve, reject) => {
let output = []
fs.createReadStream(file_name)
.pipe(csv())
.on('data', (row) => {
output.push(row)
})
.on('end', () => {
resolve(output.slice(1))
})
.on('error', function(err) {
reject(err.message)
});
})
}
即使处理了错误事件,它仍然抛出
events.js:288
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open 'goodvisit.csv'
Emitted 'error' event on ReadStream instance at:
at internal/fs/streams.js:132:12
at FSReqCallback.oncomplete (fs.js:154:23) {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'goodvisit.csv'
}
我尝试了另一种为 fs.createReadstream 声明变量的方法,虽然它适用于上述情况,但我可以正确获取数据。
在 Node 中,管道不会将错误转发到下一个管道。因此,您需要将处理程序附加到 fs
,因为没有您正在尝试读取的文件。
fs.createReadStream(file_name).on('error', err => console.log(err))
.pipe(csv())
.on('data', (row) => {
output.push(row)
})
.on('end', () => {
resolve(output.slice(1))
})
.on('error', function(err) {
reject(err.message)
});
fs
您可以查看 this link 了解更多详细信息,当我们多次通过管道传输我们的流时如何处理错误。
如果这不起作用,您可以使用 multipipe 组合多个流并在一处处理错误。
const pipe = require('multipipe')
// pipe multiple streams like A, B and C
const stream = pipe(A, B, C)
// centralized error handling
stream.on('error', fn)
这是代码
function read_csv(file_name){
return new Promise((resolve, reject) => {
let output = []
fs.createReadStream(file_name)
.pipe(csv())
.on('data', (row) => {
output.push(row)
})
.on('end', () => {
resolve(output.slice(1))
})
.on('error', function(err) {
reject(err.message)
});
})
}
即使处理了错误事件,它仍然抛出
events.js:288
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open 'goodvisit.csv'
Emitted 'error' event on ReadStream instance at:
at internal/fs/streams.js:132:12
at FSReqCallback.oncomplete (fs.js:154:23) {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'goodvisit.csv'
}
我尝试了另一种为 fs.createReadstream 声明变量的方法,虽然它适用于上述情况,但我可以正确获取数据。
在 Node 中,管道不会将错误转发到下一个管道。因此,您需要将处理程序附加到 fs
,因为没有您正在尝试读取的文件。
fs.createReadStream(file_name).on('error', err => console.log(err))
.pipe(csv())
.on('data', (row) => {
output.push(row)
})
.on('end', () => {
resolve(output.slice(1))
})
.on('error', function(err) {
reject(err.message)
});
fs
您可以查看 this link 了解更多详细信息,当我们多次通过管道传输我们的流时如何处理错误。
如果这不起作用,您可以使用 multipipe 组合多个流并在一处处理错误。
const pipe = require('multipipe')
// pipe multiple streams like A, B and C
const stream = pipe(A, B, C)
// centralized error handling
stream.on('error', fn)