【问题标题】:With fast-csv how do I call an asynchronous validator?使用 fast-csv 如何调用异步验证器?
【发布时间】:2021-07-04 08:03:56
【问题描述】:

如何调用返回承诺的函数?

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 调用不起作用。

【问题讨论】:

    标签: typescript callback fast-csv


    【解决方案1】:

    以下模式使用 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)
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2021-05-23
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多