等待 - 捕获错误 - UnhandledPromiseRejectionWarning

时间:2017-10-20 12:36:43

标签: es6-promise ecmascript-2017

我正在

 UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 44): Error: fail

main.js

import { request } from './api'

async getData({ commit, state },  ids ){
  try {
    var x = await request(ids)
    commit('getData', x.data)
  } catch ( e ) {
    console.log('request failed get',e.code,e.errno)
  }
}

api.js

export async function request(type,url,ids){
  axios.get('localhost/data')
    .then(function (response) {
      return Promise.resolve(response.data)
    })
   .catch(function (e) {
     return Promise.reject(new Error('fail'))
  })
}

我如何处理承诺拒绝? try catch块不应该从await函数中捕获错误吗?

1 个答案:

答案 0 :(得分:2)

你正在混合async / await和promises。在api.js中,无需使用 async 关键字。 async 关键字使得您从函数返回的任何内容都包含在您不需要的promise中,因为 axios.get 已经返回了一个promise。 / p>

此外,您忘记实际从Axios返回承诺,您的request函数只返回 undefined

最后,您不必从然后 catch 方法返回promise,只返回一个值,或者抛出错误。

如果你重写这个函数,它应该按预期工作:

export function request(type,url,ids){
  return axios.get('localhost/data')
    .then(function (response) {
      return response.data
    })
    .catch(function (e) {
      throw new Error('fail')
    })
}