无法从Axios获得正确的错误

时间:2017-07-24 00:16:18

标签: express axios

我有一个View函数来处理我的所有api调用:

doFetch

一个这样的api调用就是返回一个自定义错误(快递服务器):

const doFetch = function(params){
    ...
    // Make request using Axios. Axios is promise based.
    return axios({
        method: method,
        url: baseUrl + url,
        data: queryParams,
        timeout: timeout,
        headers: {
            'Content-Type': contentType,
            'Authorization': `bearer ${Auth.getToken()}` // set the authorization HTTP header
        },
        responseType: responseType
    }).then((response) => {
        if(typeof params.callback === "function"){
            params.callback(response);
        }
        else {
            return response;
        }
    }).catch((err) => {
        if(typeof params.error === "function") {
            if (err.response) {
                params.error(err.response.data);
            }
        }
        else{
            if (err.response) {
                return err.response.data;
            }
            else{
                return err;
            }
        }
    });
};

调用doFetch的函数是return res.status(400).json("There was an error on the server.");

saveUser

问题是我在终端中看到saveUser(userObj).then((response) => { console.log("No Error"); }).catch((error) => { console.log("Error:", error); }); ,我应该只期待显示错误消息。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我想完全回复承诺,以确保它能够/返回我想要的东西。

我不喜欢依赖第三方的“承诺”。


因此,我建议您将其包含在promise中并手动解决/拒绝响应/错误:

const doFetch = params => {
    ...
    // Make request using Axios. Axios is promise based.
    return new Promise((resolve, reject) => {
      axios({
        method: method,
        url: baseUrl + url,
        data: queryParams,
        timeout: timeout,
        headers: {
            'Content-Type': contentType,
            'Authorization': `Bearer ${Auth.getToken()}` // set the authorization HTTP header
        },
        responseType: responseType
      })
      .then((response) => {
        console.info('doFetch:', response); // for debug purposes

        if(typeof params.callback === "function"){
          params.callback(response);
        }
        resolve(response);
      })
      .catch((err) => {
        console.error('doFetch:', err); // for debug purposes

        const error = (err.response) ? err.response.data : err;

        if(typeof params.error === "function") {
          params.error(error);
        }
        reject(error);
      });
    };
};