我正在尝试休息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,则可以让用户知道数据不再存在。等等。