Запрос на выборку перестает работать, если я меняю маршрут - PullRequest
0 голосов
/ 25 октября 2018

Когда я изменяю маршрут с помощью this.props.history.push("/"); во время выборки компонента, следующий маршрут не делает запрос на выборку должным образом и дает Unexpected token < in JSON at position 0, как мне отладить эту проблему, какие-либо советы?Пример извлечения:

const data = {
      name: "generateToken",
      param: {
        email: "email",
        pass: "apikey"
      }
    };
    return fetch("http://localhost/streamingapp/api/", {
      method: "post",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify(data)
    })
      .then(res => {
        return res.json();
      })
      .then(content => {
        if (content.response.status === 200) {
          this.setState({
            apiToken: content.response.result.token
          });
        }
      })
      .catch(error => {
        console.error(error);
      });

1 Ответ

0 голосов
/ 06 ноября 2018

Если кто-то интересуется решением, на api возникла проблема, которая вызвала ответ html.И для исправления я просто реализую abortController, как этот, чтобы отменить запрос на выборку:

//init controller
 abortController = new window.AbortController();

//fetch example
fetch("http://my-app/newapi/", {
      method: "post",
      headers: {
        "Content-Type": "application/json",
        Accept: "application/json"
      },
      signal: this.abortController.signal
    })
      .then(response => {
        if (response.ok) {
          return response.json();
        } else {
          throw new Error("Something went wrong");
        }
      })
      .then(responseData => {
        if (responseData.response.status === 200) {
          this.setState({
            series: responseData.response.result,
            loading: false
          });
        }
      })
      .catch(error => {
        if (error.name === "AbortError") return;
        this.setState({
          series: "There was an internal error retry later."
        });
        console.error(error);
      });

//other code
componentWillUnmount() {
   this.abortController.abort();
}
...