Javascript未使用提取捕获错误

时间:2018-12-22 15:34:42

标签: javascript node.js express promise fetch

我有一个authService,具有以下提取

export const handleForm = () => {

    return fetch('http://localhost:5000/login')
        .then(response => {
            if (!response.ok) {
                throw new Error("Email or password incorrect");
            } else {
                return response.json();
            }
        })
        .then(json => json)
        .catch(error => error);
};

我正在从控制器中调用该方法:

form.onsubmit = function (e) {
    handleForm(e)
        .then(response => {
            console.log(response);
            //setAuthenticatedUser(response);
            // setDomUser(response.user);
        })
        .catch(error => {
            console.log(error);
            document.querySelector('#error').innerHTML = error;
        })
};

我已经尝试了一些方法来在控制器中捕获错误 但是我一直在触发响应回调。 未捕获到我的authService中的错误

我尝试过

  • 抛出新的Error();
  • Promise.reject();

1 个答案:

答案 0 :(得分:3)

请参见Promise.prototype.catch()

  

语法部分

p.catch(onRejected);
     

[...]

     

如果catch()抛出错误或返回本身被拒绝的Promise,则onRejected返回的Promise将被拒绝;否则,它将解决。

使用.catch(error => error)作为回调返回异常。因此,它既不会“抛出错误”,也不会“返回本身被拒绝的承诺”。这样,它所返回的承诺就得到了解决,而不是被拒绝。

只需删除.catch(error => error)即可使用。而且当您使用它时,也请删除.then(json => json),因为它没有用。