ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

靠谱的同步方法,确保任务之间平滑承接不冲突

2021-12-29 09:31:37  阅读:138  来源: 互联网

标签:同步 idx 平滑 re 二维码 msg pdf 承接


最近项目要实现团体报名功能,而每一位报名人员,都要做系列数据审查,并根据特定算法生成二维码字符串,并生成二维码图片保存,并且最后还要把团队所有人的二维码图片集成到一个pdf文件里,供领队下载打印分发。

实现这个功能的过程种,首先肯定是想到用promise做同步校验、生成二维码,最后生成pdf。可现实非常打脸。。。。。因为过程中不仅要操作数据库,等待返回,还要操作文件读写,等待返回。尝试了很多次,总是会随机出现资源冲突的情况,由此可以看出来,promise所谓的同步,本质上类似多线程并行执行的,并不是纯粹的先后执行的。

最后没办法,只能果断放弃promise,自力更生,自己创造方法。通过测试,利用setInterval实现了一个真正的顺序执行的同步方法。看代码:

var idx = 0;
var tmpLoop = setInterval(()=>{
    var p = personList[idx];
    if(!p.orderID){
        p.orderID = orderID;
        // 第一层异步方法,创建订单,需要等待返回订单号、二维码等数据
        person.exec_proc(null, proc.createOrder(), p, (re)=>{
            p.qcode = re[0].QCode;
            p.userIdx = re[0].userIdx;
            idx += 1;
            // 跳出循环的界限判定,
            if(idx == personList.length){
                clearInterval(tmpLoop);
                // 第二层异步方法,集合所有人员订单信息, 产生二维码并生成pdf图片
                tools.createQCodes(personList, (msg)=>{ 
                    res.json({
                        code: msg ? 100 : 200,
                        message: msg ? msg : '提交完成'
                    });
                }); 
            }
        });
    }
}, 100); // 间隔时间,可以根据实际每个循环工作量,适当调节,这样过程会更平滑,更节约时间

上面的代码例子,是精简后的示例代码,足以说明这个同步方法的精要了

标签:同步,idx,平滑,re,二维码,msg,pdf,承接
来源: https://blog.csdn.net/foren_whb/article/details/122208183

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有