美文网首页
有关并发异步请求的问题

有关并发异步请求的问题

作者: 卓然凌昭 | 来源:发表于2018-08-19 23:51 被阅读0次

最近项目中遇到了一个功能,会涉及到不少并发的请求,但是公司浏览器又不支持Promise、async/await,正好趁此机会总结一下有关异步请求的处理方式。


简化下项目中实际遇到的问题,去掉其他的逻辑:

有一个最终包含n个子节点的xml对象

<rules>
    <rule1>....</rule1>
    <rule2>....</rule2>
    <rule3>....</rule3>
    .....
    <rulen>....</rulen>
</rules>

需要遍历每个子节点,每次遍历到这个节点的时候,利用包括这个节点以及其prev的节点作为一个xml规则,去异步请求,最终拿到所有异步的结果去进行下面的逻辑。
再简化下,
遍历一个数组,拿每一项作为参数去异步请求

var arr = [1,2,3,4,5,6,7,8,9];

需求:因为JS事件循环的机制,后续执行的同步代码的需要之前所有异步操作的结果


方案一:并行改串行
最简单的方法就是用回调,将每次的异步操作分别放到之前异步的回调里:

function async1(){
  async2()
}
function async2(){
  //....
}
async1();

优点:简单
缺点:总执行时间是所有异步请求累加,可能会很长


方案二:用一个变量来计数

function async1(){
   callback()
}
function async2(){
  callback()
}
function callback(){
  cnt++
  if(2==cnt){
    console.log('都执行完毕')
  }
}

方案三:在方案二中不用回调计数,用定时器计数

var cnt = 0;
function async1(){
   cnt++
}
function async2(){
  cnt++
}
var interval = setInterval(function(){
  if(cnt==2){
    console.log("执行完毕")
     clearInterval(interval);
  }
})

缺点:定时器占用CPU较多


方案四:jquery的Deferred

var d1 = $.Deferred();
var d2 = $.Deferred();

function async1(){
d1.resolve( "Fish" );
}

function async2(){
d2.resolve( "Pizza" );
}

$.when( d1, d2 ).done(function ( v1, v2 ) {
console.log( v1 + v2 + '已完成');
});

相关文章

  • 有关并发异步请求的问题

    最近项目中遇到了一个功能,会涉及到不少并发的请求,但是公司浏览器又不支持Promise、async/await,正...

  • 多线程GCD

    无序网络请求,异步+并发 有序网络请求,异步+并发(推荐) dispatch_semaphore_create:创...

  • JavaScript异步并发请求问题

    最近两场面试都被问到类似的问题,其中一家是阿里的一个电话面试,感觉自己答得不是很好,因为之前一直都忽略了这个问题。...

  • 异步请求并发控制

    目的 一次添加几个异步处理,每次最多只能并行执行多少个。 思路 并发有一定的数量控制,所以后加的需要有一个队列存储...

  • Node.js 中的并发安全问题

    Node.js 中的并发安全问题 简介 Node.js 采用非阻塞异步IO的方式来处理请求。基于 Libuv 的事...

  • 第九篇:Objective-C 知识回顾多线程

    9.1.同步/异步 和 串行/并发 问题一:同步/异步 和 串行/并发组合有哪些? dispatch_sync(s...

  • AFNetworking之异步请求并发

    忘了for循环,忘了艰涩难懂的信号量。多了不说上代码,不懂自己脑补。 执行结果如下: 可加群一起交流共同学习:80...

  • 2022-03-11-🌦🌦for 异步执行方案

    for + 异步请求同步执行问题 有个需求是循环请求一个接口获得数据,问题是循环请求了但是接口是异步的,按顺序传过...

  • GCD队列组

    GCD并发队列封装,多个异步请求结束后,统一处理结果 使用方法

  • 10.1 并发(concurrency)和并行(parallel

    10.1 并发(concurrency)和并行(parallelism)区别问题一:并发与并行的区别? 异步和这小...

网友评论

      本文标题:有关并发异步请求的问题

      本文链接:https://www.haomeiwen.com/subject/qnlhiftx.html