1.前端
按钮的重复点击问题,特别是要向后台发送异步请求更改资源.
解决方法,可以利用锁机制,定义一个资源,有请求过来后锁住资源.
tag = false;
onChange = () => {
if(this.tag){
return;
}else{
this.tag=true;
}
for(let i=0;i<answers.length;i++){
if(answers[i].option.length==0){
Alert.alert("第"+(i+1)+"题未作答,请选择答案!");
this.tag=false;
return false;
}
}
let str = JSON.stringify(answers).toString();
this.commons.apis.riskEvaluationApi.saveRiskEvaluation(str).then((p:String)=>{
this.commons.apis.riskEvaluationApi.riskEvaluationResult().then((m:RiskEvaluationResultModel)=>{
this.props.navigator.push({
title:"风险测评",
screen: "RiskEvaluation.RiskEvaluationFinishScreen",
passProps: {userRiskLevel:m,isTest:true},
});
}).default();
}).default(()=>{
this.tag = false;
})
};
2.后端
1.如果是一台机器,可以写同步代码块或是锁.
2.多台机器可以实现一个分布式锁,如用redis的setNx方法.
3.还可以在数据库方面实现乐观锁,数据库记录添加版本号字段,更新的时候拿查询出的版本号和数据库中的版本号对比,如果相同则更新,不同则返回提示.
3.架构
架构上可以用kafka等消息队列,将请求串行化.
网友评论