-
原因:今天开发的功能,真的见了鬼了,有的数据报错,有的数据没报错。
-
结果:异步函数内用到的内容(this.rgTaskStore.data[0].num),在异步函数外面被修改了(this.rgTaskStore.data=[];) ,如果在异步函数外面改变了他的状态,执行时先执行函数外面的内容,那么再执行函数内部的内容那么就可能出错。
/*
收货确认按钮
*/
private rgTaskReceive = () => {
this.rgTaskService.finishDOC(this.rgTaskStore.data[0].rgrecid).then(
() => {
if(this.rgTaskStore.data[0].num === 1){
CommonUtil.alert(`收货完成,该单据需要双人收货!`);
}else{
CommonUtil.alert(`收货完成!`);
}
}
).catch(
(e:any) => {
CommonUtil.alert(e);
}
);
/*
清空内容
*/
runInAction(() => {
this.rgTaskStore.data=[];
//this.state = {rgno: ''};
});
this.setState({ rgno: undefined }, () => {
this.ref.current?.clear();
this.ref.current?.focus();
});
}
- 修改结果:把需要修改的内容全部放到异步函数里面。
/*
收货确认按钮
*/
private rgTaskReceive = () => {
this.rgTaskService.finishDOC(this.rgTaskStore.data[0].rgrecid).then(
() => {
if(this.rgTaskStore.data[0].num === 1){
CommonUtil.alert(`收货完成,该单据需要双人收货!`);
}else{
CommonUtil.alert(`收货完成!`);
}
runInAction(() => {
this.rgTaskStore.data=[];
//this.state = {rgno: ''};
});
this.setState({ rgno: undefined }, () => {
this.ref.current?.clear();
this.ref.current?.focus();
});
}
).catch(
(e:any) => {
CommonUtil.alert(e);
}
);
}
粗心大意使不得。