typescript - 使用 fast-csv 如何调用异步验证器?
问题描述
如何调用返回承诺的函数?
const checkDatabase = async (row: Row): Promise<boolean> => {
return await checkDatabaseService.check()
}
使用管道,例如
parseStream(steam, {})
.validate(row: Row, processValidationError) : void => {
processValidationError(null, checkDatabase(), 'ok')
}
.on('data-invalid', (row: Row, rowNumber: number, reason: string) => {
console.log(`${JSON.stringify(row)} ${rowNumber} ${reason}`)
}
.on('data', row => email(row))
.on('error', error => console.error(error))
.on('end', (rowCount: number) => console.log(`Processed ${rowCount} rows.`));
.validate 调用不起作用。
解决方案
以下模式使用 validate 和 data-invalid 工作。
parseStream(stream, {})
.validate((row: Winner, validationErrorCb): void => {
validateEmail(row, validationErrorCb)
})
.on('data', row => this.promises.push(saveRow(row)))
.on('data', row => this.promises.push(email(row)))
.on('data-invalid', (row, rowNumber: number, reason: string) => {
console.log(`Invalid [rowNumber=${rowNumber}]
[row=${JSON.stringify(row)}] [reason=${reason}]`)
const errorRow = processValidationError(row, rowNumber, reason)
this.promises.push(saveRow(errorRow))
})
回调方法检查数据并返回验证回调 isValid: false 在失败的情况下
const validateEmail = (row: Winner, validationErrorCb: RowValidateCallback): void => {
const valid = row.email && !EmailValidator.validate(row.email)
if (valid) {
return validationErrorCb(null, true, 'ok')
}
row.winPayStatus = WinPayStatus.invalid
const msg = `Key email ${row.email} is invalid.`
console.error(msg + JSON.stringify(row))
return validationErrorCb(null, false, msg)
}
推荐阅读
- pdfbox - pdfparser - 文档结构元数据
- javascript - 如何设置垂直刻度的周期?
- python - 迭代numpy数组保持索引
- error-handling - 为什么 Rust 编译器不使用 From 特征从库错误转换为我的错误?
- python - Python:pickle.load() 只返回文件的第一个值
- websocket - 如何让 socket.io 自动压缩我的消息?
- javascript - 在子元素渲染后映射 React 元素的子元素
- c# - (C#WPF)我在一个循环中使用2个等待,它们到处都是
- android - DJI Android SDK 桥接器
- amazon-web-services - 如何验证 RDS 数据库中的数据是静态加密的?