1 回答
TA贡献2036条经验 获得超8个赞
主要问题是updatePU不返回承诺。您应该通过return在 前面添加来返回承诺链的结果fetch:
return fetch('/ModifyPUOrder', {
然后在顶部的代码中,不要创建新的承诺,使用来自的承诺updatePU:
this.updatePU(name, 'text', selectedOption.code)
.then(() => {
console.log('Calling checkExpress function');
// ...
还有第二个(基本上不相关的)问题:您正在将网络错误(拒绝)转换为履行:
.then(response => {
if(response.ok){
return response.json();
} else {console.log(response)}
throw new Error('Request failed!');
}, networkError => { // ***
console.log(networkError.message); // *** Converts rejection to fulfillment with `undefined`
}) // ***
请记住,链中的每个处理程序都会转换通过它的内容。不抛出或返回拒绝的承诺的拒绝处理程序将拒绝转换为履行。
不要在console.log任何地方添加转储错误,只需传播链,并且在无法进一步传播链的顶层,只需添加一个.catch报告/处理错误的 final (您在第一个代码块中确实有) .
有关这方面的***注释和其他一些事情,请参阅评论:
updatePU = (name, type, value) => {
const PUOrderNo = this.props.puOrderNo;
const updatedValue = type === 'text' ? (`'${name}': '${value}'`) : (`'${name}': ${value}`);
return fetch('/ModifyPUOrder', {
crossDomain: true,
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
updatedValue: updatedValue,
puOrderNo: PUOrderNo
}),
})
.then(response => {
if(response.ok){
return response.json();
} // *** No console.log here
throw new Error('Request failed!'); // *** I wouldn't hide what happened, perhaps: `throw new Error("HTTP error " + response.status);`
}/* ***No rejection handler here */)
.then(data => {
if ("error" in data) {
alert(data.error.message);
this.refresh();
// *** You presumably want to return here or use `else` so you don't update the form below...?
}
this.props.updatePUOrderForm(data);
});
}
添加回答
举报