文档章节

顺序发送异步请求、同时发送异步请求;apply()与call()的区别

木子丰
 木子丰
发布于 2014/02/19 17:07
字数 453
阅读 71
收藏 2

前台发送异步请求的情况:
1、顺序发送:A执行完了,再执行B
2、无序发送:A、B执行的顺序无所谓
3、同时发送:A、B同时执行
==========================================
对于顺序发送
$.when(A).then(function() {B});(then可换为done)
==========================================
对于无序发送
1.直接按代码顺序执行A,B或$.when(A,B)
$.when(A,B)的其它写法$.when.apply(thisArg, [A,B])$.when.call(thisArg,A,B)
2.使用Function.prototype.apply()方法:
语法:fun.apply(thisArg,argsArray)
fun为一个函数
thisArg为运行函数的作用域(或理解成调用函数的对象)
argsArray为参数任务列表,如果其长度为3,则fun函数执行3次,分别取argsArray[0],argsArray[1],argsArray[2]作为参数分别运行。

fun ... $.when
thisArg ... $
argsArray ... [A,B]

代码如下:
var tasks = [A,B];
$.when.apply($,tasks);
3.使用Function.prototype.call()方法:
语法:fun.call(thisArg,args[0],args[1],...)

其实apply()与call()本质上是一样的,只不过apply把所有的参数放到一个数组中,通过数组传递,而call需要把每个参数都详细列出,


==========================================
对于同时发送:像java的多线程一样

1,按顺序书写代码即可:A;B;因为A,B都是异步请求,请求发送后,会接着执行后面的代码
或通过setTimeout实现(感觉有点多此一举)
setTimeout(function() {A}, 10);
setTimeout(function() {B}, 10);
虽然不是真正意义上的同时执行,但是效果差不多了
==========================================


对于使用$.when方法执行异步请求后,要返回deferred对象的情况:

var deferred = new Deferred();
$.when(A,B).then(
    function() {
        deferred.resolve({});
    },
    function() {
        deferred.reject({});
    },
);
return deferred;
//由于异步的原因deferred对象会先返回,其后根据A,B的执行情况,会影响其状态:成功或失败


 

© 著作权归作者所有

木子丰
粉丝 17
博文 236
码字总数 68754
作品 0
郑州
程序员
私信 提问
angular学习笔记-$q服务

angular中的$q是用来处理异步的(主要当然是http交互啦~). $q采用的是promise式的异步编程.什么是promise异步编程呢? 异步编程最重要的核心就是回调,因为有回调函数,所以才构成了异步编程,而回...

孟飞阳
07/17
0
0
RocketMQ源码分析(二)Producer端发送数据

1 系列 - 整体架构图- producer端发送消息- broker端接收消息- broker端消息的存储- consumer消费消息- 分布式事务的实现- 定时消息的实现- 关于顺序消费话题- 关于重复消息话题- 关于高可用...

乒乓狂魔
2016/10/09
469
1
何为同步和异步

Android Telephony相关应用中,Telephony大量使用了Handler、Broadcast等通信方式,而在Android操作系统平台中的Handler消息处理、Broadcast广播消息等均采用异步通信机制,那么我们首先要清...

colorlesswind
2015/12/03
107
0
Flink 原理与实现:Aysnc I/O

背景 Async I/O 是阿里巴巴贡献给社区的一个呼声非常高的特性,于1.2版本引入。主要目的是为了解决与外部系统交互时网络延迟成为了系统瓶颈的问题。 流计算系统中经常需要与外部系统进行交互...

张欢19933
08/27
0
0
OkHttp3.0-源码分析

1. OkHttp官网介绍: OkHttp: An HTTP+HTTP/2 client for Android and Java applications. 该库支持 HTTP1.0、HTTP1.1、HTTP2.0 以及 SPDY ,都在类Protocol 中声明。 2. OkHttp的基本使用:......

负了时光不负卿
2017/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
41分钟前
6
0

中国龙-扬科
昨天
2
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
8
0
java框架学习日志-6(bean作用域和自动装配)

本章补充bean的作用域和自动装配 bean作用域 之前提到可以用scope来设置单例模式 <bean id="type" class="cn.dota2.tpye.Type" scope="singleton"></bean> 除此之外还有几种用法 singleton:......

白话
昨天
8
0
在PC上测试移动端网站和模拟手机浏览器的5大方法

总结很全面,保存下来以备不时之需。原文地址:https://www.cnblogs.com/coolfeng/p/4708942.html

kitty1116
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部