关于并发

2017-09-30  本文已影响0人  wi11iam
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等消息队列,将请求串行化.

上一篇 下一篇

猜你喜欢

热点阅读