文档章节

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

木子丰
 木子丰
发布于 2014/02/19 17:07
字数 453
阅读 68
收藏 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
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
何为同步和异步

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

colorlesswind
2015/12/03
107
0
[Ajax-相濡以沫,不如相忘于江湖] Ajax初识

Ajax的全称是 Asynchronous JavaScript And XML,即异步JavaScript和XML。2005年由Jesse James Garrett首先提出。在之后极短的时间内,Ajax被广泛应用到大量B/S结构的应用中,改进了传统的W...

LSantorini
2016/01/26
30
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 乱七八糟的可重复读隔离级别实现

MySQL 乱七八糟的可重复读隔离级别实现 摘要: 原文可阅读 http://www.iocoder.cn/Fight/MySQL-messy-implementation-of-repeatable-read-isolation-levels 「shimohq」欢迎转载,保留摘要,谢...

DemonsI
45分钟前
2
0
Spring源码阅读——2

在阅读源码之前,先了解下Spring的整体架构: 1、Spring的整体架构 1. Ioc(控制反转) Spring核心模块实现了Ioc的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描...

叶枫啦啦
今天
1
0
jQuery.post() 函数格式详解

jquery的Post方法$.post() $.post是jquery自带的一个方法,使用前需要引入jquery.js 语法:$.post(url,data,callback,type); url(必须):发送请求的地址,String类型 data(可选):发送给后台的...

森火
今天
0
0
referer是什么意思?

看看下面这个回答(打不开网页可以把网址复制到搜索栏): https://zhidao.baidu.com/question/577842068.html

杉下
今天
1
0
使用U盘安装CentOS-解决U盘找不到源

1. 使用UltraISO制作CentOS安装盘 如果需要安装带界面的系统,为保证安装顺利,可选择Everything版本的ISO制作安装盘。 2. 在BIOS中选择使用U盘安装 系统启动后,进入安装选择界面,其中有三...

Houor
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部