在前端调用的时候,我们难免需要同一时刻向后端请求多组数据或是总是期待着是否存在一个独立的线程去处理一系列的数据。线程相应,资源的抢占这是前端较为麻烦的点。这里就来聊聊我在前端踩的坑。

首先是线程问题说到线程,我们可以发现前端确实不是单一线程进行事务处理的。前端准备发出axios请求时会新开一个独立的线程并且是该线程进入等待阶段,等待后端数据的返回。那么原先的线程会继续执行。(这里需要描述清楚一点,线程和进程。一般现在电脑都是多核CPU也就是电脑同时能进行多条线程的运算。曾经设想过,假设一个线程能独立进行运算处理指定的数据,不影响其他业务的流转,结果发现想多了。)实验证明前端如果使用了等待算法。

async sleep (millisecond){
return new Promise(resolve => {
setTimeout(()=>{
resolve()
},millisecond);
})
}

当等待时间比较长,数据量比较大的情况下,整体界面相当于完全卡死。

当时场景是使用锐浪进行打印机调用,锐浪在获取打印模板和打印数据的时候都是自己独立进行的。之前由于如果在上一个数据执行完之前,下一个数据源再次重新获取后,会导致该功能报错,所以补了一个延时。从而进行控制,避免应用报错。

这时候我有一个假设,其实游览器一个页面只开了一个进程进行整体数据的处理,虽然内部不同的线程会不停的创建关闭,但是一旦涉及到到等待之类的,整体都会被拖死。

Promise.all的应用。

主线程中我开了多个后端调用,我准备等全部后端调用完成后再将界面的锁定进行放开,但是发现主线程走完了,Promise.all后面在慢慢执行,其确实是等全部的请求都获取到了,但是其并不会将主线程卡住。感觉更像是开了一个新的线程。去等待所以HTTP请求的结束。

那么应对这种方式,那么会将下一步的处理一到Promise.all中。

 1 setSampleOrder(model, reportSeqno) {
2 let oneItem = webRequest
3 .HttpPost('A',data)
4 .then(res => {
5 }).catch(error => {
6
7 })
8 deanTempList.push(oneItem);
9 oneItem = webRequest
10 .HttpPost('B',data)
11 .then(res => {
12 }).catch(error => {
13
14 })
15 Promise.all(deanTempList).then((res) => {
16 console.log("选项加载完成")
17 this.getReportItemList()
18 })
19 }

最新文章

  1. 现在web前端这么火,钱景怎么样啊?
  2. 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理
  3. 2014 WAP校园招聘笔试题
  4. PHP数据访问
  5. hdu 4006/AvlTree
  6. Android高手进阶:Adapter深入理解与优化
  7. POJ1734 - Sightseeing trip
  8. VC中获取窗体句柄的各种方法
  9. JavaScript之call()&apply()
  10. sqlserver触发器如何将一个库中的数据插入到另外一个库中
  11. 关于UIWebview的属性的介绍
  12. add-apt-repository
  13. lua时间戳和日期转换及踩坑
  14. 谈谈如何给下拉框option添加点击事件?
  15. mysql 开发进阶篇系列 30 数据库二进制包(安装指定路径,目录介绍)
  16. springcloud单个服务内存使用详情
  17. 事务,acid,cap,paxos随笔
  18. js 对象数组查找元素常用方法
  19. c# 使用checked和unchecked
  20. ssm的web项目,浏览器使用get方法传递中文参数时,出现乱码

热门文章

  1. 开源MyBatisGenerator组件源码分析
  2. ExcelPatternTool: Excel表格-数据库互导工具
  3. Vue mixin(混入) && 插件
  4. jquery转换为同步请求
  5. TS入门基础
  6. Webstorm设置背景图为Windows桌面背景
  7. Java精进-手写持久层框架
  8. [网鼎杯 2020 朱雀组]phpweb-1|反序列化
  9. Enable_hint_table 使用
  10. Springboot shiro JWT集成总结