我正在尝试休息API。这是我的反应代码:

var URL = 'myurl&partno=';

handleSearch(){
  var numbers = this.state.newTodo.split("\n");
  var queries = [];
  var response;
  var parseString = require('xml2js').parseString;
  var responses = [];
  var URL = 'myurl&partno=';
  numbers.forEach((number)=>{
  queries.push(URL.concat(number));

  response = axios.get(URL.concat(number),{
    method: 'GET',
    mode: 'no-cors',
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'text/plain',
    },
    withCredentials: true,
    credentials: 'same-origin',
  });

  response.then(res => {
    parseString(res.data, (err, result)=> {
      var r = result.result.data[0].row;
      console.log(r);
      r.forEach(row => {
        responses.push(row);
      })
      this.setState(()=>({
        responseItems: responses
      }) )
    });
  });
});
};


抱歉隐藏网址,但我不想发布。此代码从状态获取值,然后转换为数组。接下来,它将构建查询(concat值和字符串)。

console log

在这里,您有4个值的示例,因此有4个查询,但只有2个通过。设置时间间隔没有帮助(我认为API正在阻止)。这段代码一切都还好吗?我从API创建者那里知道,它们不限制查询。

提前致谢

最佳答案

403错误是forbidden。因此,您尝试访问不允许使用的REST API的一部分。因此,如果您需要某些请求的额外凭据,或者如果成功执行的查询不需要凭据,请与API管理员联系,以确保凭据错误。

控制台中的承诺结果错误是由那些拒绝承诺的403响应引起的。而且您没有任何错误处理程序来捕获那个承诺错误。因此,我建议在您的代码中添加一个.catch()块以捕获此错误:

response
    .then( res => {
        // do things with the responses.
    })
    .catch( error => {
        // Catch errors here.
    });


promise错误现在将消失,403结果将触发此.catch()子句。因此,您可以在此处添加任何错误处理。例如,对于403,您希望让用户知道他们正在尝试查询无权访问的数据。
如果响应是超时,则可以在此处重复对API的调用。如果响应为404,则可以让用户知道数据不再存在。等等。

10-05 20:57
查看更多