Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重构catch方法_Javascript_Vue.js_Error Handling - Fatal编程技术网

Javascript 如何重构catch方法

Javascript 如何重构catch方法,javascript,vue.js,error-handling,Javascript,Vue.js,Error Handling,我有一个错误处理的代码,我在一些组件中使用它,我认为更好的方法是编写一个可以在许多地方使用的函数,而不是到处复制相同的代码。下面是我的例子: this.fetchDataFromAPI(this.filters) .then(() => {}) .catch(error => { if ((!error.body.invalidFields || !Object.keys(error.body.invalidFields).length) &a

我有一个错误处理的代码,我在一些组件中使用它,我认为更好的方法是编写一个可以在许多地方使用的函数,而不是到处复制相同的代码。下面是我的例子:

this.fetchDataFromAPI(this.filters)
      .then(() => {})
      .catch(error => {
        if ((!error.body.invalidFields || !Object.keys(error.body.invalidFields).length) && error.body.errorMessage) {
          this.$message({
            message: error.body.errorMessage,
            type: MESSAGES_TYPES.error
          })
        }
        if (error.body.invalidFields && Object.keys(error.body.invalidFields).length) {
          const errors = error.body.invalidFields
          Object.keys(errors).forEach(error => {
            this.errors.push(
              {
                message: errors[error],
                path: [error]
              }
            )
          })
          ValidatorClass.validFormIfBackendErrors(this.errors, this.$refs[this.formName])
        }
      })

如何重构它?

您可以将错误处理程序定义为可重用的命名函数

const errorHandler = error => {
  if ((!error.body.invalidFields || !Object.keys(error.body.invalidFields).length) && error.body.errorMessage) {
    this.$message({
      message: error.body.errorMessage,
      type: MESSAGES_TYPES.error
    })
  }
  if (error.body.invalidFields && Object.keys(error.body.invalidFields).length) {
    const errors = error.body.invalidFields
    Object.keys(errors).forEach(error => {
      this.errors.push(
        {
          message: errors[error],
          path: [error]
        }
      )
    })
    ValidatorClass.validFormIfBackendErrors(this.errors, this.$refs[this.formName])
  }
}

this.fetchDataFromAPI(this.filters)
  .then(() => {})
  .catch(errorHandler)

您可以创建一个包含errorHandler的helper js文件,并将其导入其他Vue文件中。您认为如何使用静态方法而不仅仅是函数创建一个类?我应该让它保持原样,还是使用静态方法的类也是一个好的解决方案?