使用快速csv,如何调用异步验证器



如何调用返回promise的函数?

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)
}

最新更新