使用Promise时API调用被拒绝

时间:2019-08-07 12:24:04

标签: reactjs api promise

我是新来做出反应并做出承诺的人,我目前遇到一个我不确定的错误,我正在调用API,但在承诺中被拒绝。在代码中,我已在控制台中记录了API端点,以查看错误是否在那儿,但可以正常工作。

下面是我的代码;

export function LoginAPICall(type, firstname, email, password){
  let baseURL = 'http://40.121.111.11:8020/';
  return new Promise((resolve, reject) => {
    console.log(baseURL + type + '/' + firstname + '/' + email + '/' + password);
    return fetch(baseURL + type + '/' + firstname + '/' + email + '/' + password)
    .then((response) => response.json())
    .then((responseJson) => {
      resolve("Success");
      return responseJson.json();
    })
    .catch((error) => {
      console.log("Error");
      reject("Ting is messed");
    });
  })
}

在这里是用户;

  login = event => {
    event.preventDefault();
    console.log(this.state.firstname);
    LoginAPICall('login', this.state.firstname, this.state.email, this.state.password).then(( result ) => {
      console.log(result);
    })
  }

错误;

Uncaught (in promise) SyntaxError: Unexpected token L in JSON at position 0

对此代码的任何帮助/建议将不胜感激!

2 个答案:

答案 0 :(得分:0)

当返回的数据存在问题时通常会发生此错误(看起来它可能不是正确的JSON,因此无法使用.json()正确解析),但是您可能要尝试{{ 1}},而不只是response.data.json()

我还将尝试在console.log响应中查看响应内容。

答案 1 :(得分:0)

首先,提取将返回一个承诺,因此您不需要另一个。您也不能两次调用.json()(我认为)。

export default LoginAPICall = (type, firstname, email, password) =>
  fetch(`http://40.121.111.11:8020/${type}/${firstname}/${email}/${password}`)
    .then(response => response.json())
    .catch(error => console.log(error));

如果这不起作用,那是因为您没有从后端获得有效的JSON响应。