所以我使用这个方法调用我在单独的js文件中定义的all purpose fetch方法:
export function detailedView(request,token)
{
let endpoint = 'api/v1/cbn/inventory/GetDetailRequest?RequestNo='+request['RequestNo'];
let header = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": "Bearer "+ token
}
return dispatch => {
return fetchAPI(endpoint,'POST', header, null)
.then((json) => {
dispatch(receiveDetails());
})
.catch((error) => { //PROBLEM IS HERE
console.log("error message: " + error);
dispatch(receiveEmptyDetails());
});
}
}
该代码中的标记点由于某种原因总是被调用,尽管下面的fecth函数总是在下面标记的位置结束:
export function fetchAPI(endpoint, method, header, data) {
let url = 'http://10.64.2.149:8082/' + endpoint;
let options = {
method: method,
headers: header,
body: stringify(data)
};
return fetch(url, options)
.then(response => {
return response.json()
.then((json) => {
console.log(json, response) //AT THIS POINT RESPONSE STATUS IS 200, SHOWN IN THE SCREENCAP BELOW
if (response.status === 200 || response.status === 201) {
return json;
} else if (response.status === 408) {
throw('Request Timeout');
}
else if (response.status === 400){
throw ('Bad request');
}
else {
if (json.errors) {
throw(json.errors);
} else {
throw('unknown error');
}
}
})
})
.catch(error => {
if (typeof error.message !== 'undefined') {
throw(error.message);
} else if (typeof error === 'string') {
throw(error);
} else if (Object.keys(error)) {
let errStr = '';
let errors = _.omit(error, ['column', 'line', 'sourceURL'])
_.forEach(errors, function (value) {
errStr += value + '.\n';
});
throw (errStr);
} else {
throw('unknown error');
}
});
}
module.exports = { fetchAPI };
我有另一种方法与此完全相同(只是使用不同的端点,但其他一切都是复制和粘贴),它使用上面相同的获取函数,并且问题从未出现过。
但是从打印的控制台日志(最后一行)可以看出,出于某种原因,此位始终解析为catch
而不是then
,将其称为reference error
,就好像要求没有成功。
任何人都知道这里发生了什么?
答案 0 :(得分:0)
正如我在回复@riwu的评论中提到的,我的错误很简单:
我匆忙编辑了我的代码,我将action object
作为参数传递给dispatch
作为返回对象传递给receiveDetails()
函数。
然后我像dispatch(receiveDetails())
那样传递了这个函数。
但是,我忘记将正确的参数传递给receiveDetails()
,这个电话应该是receiveDetails(request,json.data)
,而不是我在上面的帖子中写的。
然后,当receiveDetails()
无法构建action object
时,它会转到catch
,我的控制台日志会被触发,这就是我假设的原因从catch
直接fetchAPI
。
这是一个愚蠢的错误,很抱歉在这篇文章中误导了所有人并感谢有见地的评论! :d