0

我有一个简单的async功能。它只是发送一个请求并返回数据:

export const updatePanorama = async ({ commit }, payload) => {
  const urlEnd = '/v1/pano/update'
  const type = 'post'
  const resp = await api.asyncRequest(urlEnd, type, payload)
  commit('SET_PANORAMA', resp.data)
  return resp
}

这就是我使用该功能的方式:

handleUpdatePanorama (panorama) {
  const payload = {}
  this.updatePanorama(payload).then(resp => {
    this.setIsLoading(false)
    this.handleAlert('updateSuccess', 'success')
  }).catch(() => {
    this.setIsLoading(false)
    this.handleAlert('updateError', 'danger')
  })
},

问题是,catch如果内部有错误,则运行后的代码then。但是这样我不知道catch错误是请求错误还是内部代码触发的错误。

我正在尝试解决这个问题trycatch

handleUpdatePanorama (panorama) {
  try {
    const payload = {}
    const resp = await this.updatePanorama(payload)
    console.log('resp:', resp)
    this.setIsLoading(false)
    this.handleAlert('updateSuccess', 'success')
  } catch (err) {
    this.setIsLoading(false)
    this.handleAlert('updateError', 'danger')
  })
},

但是,我在这一行中遇到了一个意外的令牌错误:await this.updatePanorama(payload)

我究竟做错了什么?

4

2 回答 2

1

如果您需要专门处理来自 updatePanorama 的错误,请使用 .then(onSuccess, onError) 的第二个参数

handleUpdatePanorama(panorama) {
    const payload = {}
    this.updatePanorama(payload).then(resp => {
        this.setIsLoading(false)
        this.handleAlert('updateSuccess', 'success')
    }, err => {
        // handle error from updatePanorama
        // you can throw err if you also want to handle the error in .catch()
    }).catch(() => {
        this.setIsLoading(false)
        this.handleAlert('updateError', 'danger')
    })
}

注意:如果您return(或没有返回语句)来自错误处理程序,则任何后续.then(onSuccess都将执行,如果您抛出错误(或返回 Promise.reject() 例如,那么 .catch() 代码也将运行

于 2016-12-19T02:56:22.383 回答
1

问题是,catch如果里面有错误,运行后的代码then

解决方案是不使用catch,而是使用第二个then参数。请查看 和之间的区别.then(…).catch(…).then(…, …)以了解详细信息。

我正在努力解决这个try问题catch

那是行不通的,如果orcatch抛出异常,该子句仍将被调用。setIsLoadinghandleAlert

我收到意外的令牌错误。我究竟做错了什么?

您尚未将该handleUpdatePanorama方法声明为async.

为了缓解问题并修复语法,您可以编写

async handleUpdatePanorama (panorama) {
  var result
  try {
    const payload = {}
    const resp = await this.updatePanorama(payload)
    console.log('resp:', resp)
    result = ['updateSuccess', 'success']
  } catch (err) {
    result = ['updateError', 'danger']
  } finally {
    this.setIsLoading(false)
  }
  this.handleAlert(...result)
},
于 2016-12-19T02:50:36.383 回答