首页 文章

在第二次获取请求中使用获取响应

提问于
浏览
0

我有一个带有两个获取请求的函数 . 第一个获取请求返回包含ACCTNO的对象数组 . 我正在尝试使用返回的ACCTNO是第二个请求 . 但是我没有任何成功 . 我也试图引用this.state.buildUrl,因为我需要在视图中渲染buildUrl但是我得到错误说this.setState不是函数或未定义 . 如何在第二个请求中使用第一个获取响应?

componentDidMount() {


  var url = 'http://10.0.2.2:8080/combined';
   var result = fetch(url, {
    method: 'get',
  }).then(function(response) {
    return response.json(); 
  }).then(function(data) {
    var ACCTNO =  data[0].ACCOUNT;

  var FormData = require('form-data');
    var form = new FormData();
    form.append('businessId', '123456');
    form.append('login', 'SAFConnectUser');
    form.append('password', '123445678');
    form.append('billingAccountNumber', ACCTNO);
    form.append('signOffURL', 'fd');
    form.append('timeOutURL', 'fd');

  fetch('https://collectpay-uat.princetonecom.com/otp/namevaluepair/submitSingleSignOn.do', {

      method: 'POST',

      body: form
    }).then((response) => response.text()).then((res) => {
      if (res.error) {
        console.log(res.error)
      }

      console.log(res)


      var fields = res.split('|');

      var getUrl = fields[3];
      var buildUrl = getUrl.slice(14)


      // Getting error that setState is not a function?
      this.setState({buildUrl})


    console.log(buildUrl)
    console.log(ACCTNO)  

    })

  })

}






  render() {



    return (
 <WebView
        source={{uri: this.state.buildUrl}}
        style={{marginTop: 20}}
      />

    );
  }
}

export default acidirect;

2 回答

  • 1

    将所有函数更改为胖箭头函数,以便它们可以引用 this

    class acidirect {
      componentDidMount() {
        fetch('http://10.0.2.2:8080/combined', {
          method: 'get',
        })
        .then(response => response.json())
        .then(data => {
          var ACCTNO = data[0].ACCOUNT;
          var FormData = require('form-data');
          var form = new FormData();
          form.append('businessId', '123456');
          form.append('login', 'SAFConnectUser');
          form.append('password', '123445678');
          form.append('billingAccountNumber', ACCTNO);
          form.append('signOffURL', 'fd');
          form.append('timeOutURL', 'fd');
    
          fetch('https://collectpay-uat.princetonecom.com/otp/namevaluepair/submitSingleSignOn.do', {
            method: 'POST',
            body: form
          })
          .then(response => response.text())
          .then(res => {
            var fields = res.split('|');
            var getUrl = fields[3];
            var buildUrl = getUrl.slice(14);
            this.setState({buildUrl});
          });
        });
      }
    
      render() {
        return (
          <WebView
            source={{uri: this.state.buildUrl}}
            style={{marginTop: 20}}
          />
        );
      }
    }
    
    export default acidirect;
    
  • 0

    您可以将您的响应设置为首次获取状态为

    fetch('/url',{credentials: 'same-origin'}).then(function(response) {
        return response.json();
    }).then(this.setSomeState);
    

    现在设置你的状态

    setSomeState: function(response) {
    
        this.setState({
            array: response
        });
      },
    

    现在你可以在任何地方使用它

    this.state.array
    

相关问题