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

首先是线程问题说到线程,我们可以发现前端确实不是单一线程进行事务处理的。前端准备发出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 }

关于Vue多线程的思考的更多相关文章

  1. Python爬虫(十八)_多线程糗事百科案例

    多线程糗事百科案例 案例要求参考上一个糗事百科单进程案例:http://www.cnblogs.com/miqi1992/p/8081929.html Queue(队列对象) Queue是python ...

  2. 基于iscroll的better-scroll在vue中的使用

    什么是 better-scroll better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在这里.better-scroll 也很强 ...

  3. better-scroll在vue中的坑

    在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 也可以是横向滚动的导航栏,如图所示: 可以打开“微信 —> 钱包—>滴滴出 ...

  4. better-scroll在vue中的应用

    在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 微信 —> 钱包—>滴滴出行”体验效果. 什么是 better-scrol ...

  5. python 多线程糗事百科案例

    案例要求参考上一个糗事百科单进程案例 Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 ...

  6. Python爬虫开发【第1篇】【多线程爬虫及案例】

    糗事百科爬虫实例: 地址:http://www.qiushibaike.com/8hr/page/1 需求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个帖子里的用户 ...

  7. 八、多线程爬虫(先占个位置,等整理好线程,进程,协程,异步IO在来写)

    计算机的核心是CPU,CPU承担了所有的计算任务. 一个CPU核心,一次只能执行一个任务: 多个CPU核心同时可以执行多个任务. 一个CPU一次只能执行一个进程,其他进程处于非运行状态. 进程里包含的 ...

  8. 5. vue常用高阶函数及综合案例

    一. 常用的数组的高阶函数 假设, 现在有一个数组, 我们要对数组做如下一些列操作 1. 找出小于100的数字: 2. 将小于100的数字, 全部乘以2: 3. 在2的基础上, 对所有数求和: 通常我 ...

  9. 手动实现一个vue cli

    目录 手动实现一个vue cli 1. 思考准备 2. 我们组织源码将会放在名为src的目录,webpack 打包需要一个入口文件,我们取作 main.js 3. 先预想以下会用到哪些基本依赖,第一个 ...

随机推荐

  1. MySQL sql优化(摘抄自文档)

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  2. YII类的映射表机制

    <?php /** * Created by PhpStorm. * Date: 2016/5/25 * Time: 19:09 * * YII的类的映射表 */ namespace front ...

  3. 你的工具包已到货「GitHub 热点速览 v.22.31」

    如果你经常用 shell 记得看看本周特推里的 gum,它能给你的 shell 增加新趣味.除了这个 shell kit,我们还有 dashboard kit--tabler,功能技能 kit eng ...

  4. Python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_97 最近无论是面试还是笔试,有一个高频问题始终阴魂不散,那就是给一个大文件,至少超过10g,在内存有限的情况下(低于2g),该以什 ...

  5. Veux mapState、mapGetters、mapActions、mapMutations && Vuex命名空间

    1 # 一.四个map方法的使用 2 # 1.mapState方法:用于帮助我们映射state中的数据为计算属性 3 computed:{ 4 // sum(){ 5 // return this.$ ...

  6. 使用 DolphinScheduler 调度 Kylin 构建

    本文章经授权转载 Apache Kylin 上游通常有复杂的数据 ETL 过程,如 Hive 入库.数据清洗等:下游有报表刷新,邮件分发等.集成 Apache DolphinScheduler 后,K ...

  7. LuoguP4219 [BJOI2014]大融合(LCT)

    早上考试想用\(LCT\)维护联通块\(size\),现在才发现\(LCT\)的\(size\)有虚实之分 \(Link\)与\(Acess\)中虚实变,干他丫的 \(Splay\)中只是相对关系,没 ...

  8. CCF NOI Online 2021 提高组 赛后心得

    T1 做个,不会,拿到 20 pts 跑路. 注意后面有个 K = 1 的部分分,这个可以递推求 b 的个数,然后直接乘上 a0 . 官方正解讲得极其详细,我还是第一次见到可以 O(K2) 做 1~n ...

  9. MyBatis快速上手与知识点总结

    目录 1.MyBatis概述 1.1 MyBatis概述 1.2 JDBC缺点 1.3 MyBatis优化 2.MyBatis快速入门 3.Mapper代理开发 3.1 Mapper代理开发概述 3. ...

  10. Hadoop相关WebUI端口记录

    以下均为默认端口号,可根据配置文件修改:HDFS:50070yarn:8088Hive:10002HBase:60010Spark:8080Flink:8081Storm:8080