`
highfly-s
  • 浏览: 96840 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多次调用同一异步方法体会出现使用相同的属性值问题

阅读更多

《一》执行同一个方法体,里面有异步的逻辑代码,如果这个异步请求还没有执行完毕时,我们又对它进行了第二次调用,它会使用最后一次的执行操作。例如:

 

var test = {

 

init:function(){

this.temp = "temp" + new Date().getTime();

console.log(this.temp );

 

self = this;

this[this.temp] = function(){

setTimeout(function(){

console.log(this.temp);

},3000)

                }

},

excute:function(){

this[this.temp]();

}

};

第一次执行:

test.init();

test.excute();

 第二次执行:

test.init();

test.excute();

在两次init时输出的 temp是各不相同 。

但我们在异步函数体输出的却是相同的,也即是第二次执行的被第一次的给覆盖掉了 。这和我们理想中的状态差别不是一般的大。在很多应用场景当中,比如说我们做了一个异步请求,还没有来得异步数据处理完毕,我们又进行了第二次操作。 就会出现处理数据混乱。

 

 

《二》有没有解决办法呢:请看下面的代码:

 

var test = {

 

init:function(){

this.temp = "temp" + new Date().getTime();

console.log(this.temp);

self = this;

this[this.temp] = (function(){

var bb = self.temp;

return function(){

setTimeout(function(){

console.log(bb);

},3000)

}

})();

},

excute:function(){

this[this.temp]();

}

};

test.init();

test.excute();

 

 

这个也就是在异步包含体给加了一个闭包,把所要传的值放在临时变量中,这样就解决了重复调用最后的属性值了。

分享到:
评论

相关推荐

    [原创]基于FLASH机制实现的不同域窗口相互调用js的插件-虫洞

    使用此插件传输的数据对象是多样化的,可传输除了DOM元素之外的任何JavaScript支持的数据类型,一次传输的数据总量最大可达40kb,相对于其它Javascript跨域相互调用的方法,有着支持数据类型多、可传输数据量大的...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    jquery插件使用方法大全

    开发人员借此可以使用无法立即获得的返回值(如异步Ajax请求的返回结果),而且第一次能够附加多个事件处理器。 例如,使用了新的jQuery内部Ajax API就可以实现下面的代码了: // Assign handlers immediately ...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    在C#中SendMessage和PostMessage的参数传递

    用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。 5、在 Windows 2000/XP 里,...

    软件工程-理论与实践(许家珆)习题答案

    获取足够多的问题领域的知识,需求抽取的方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等 ...

    Oracle9i的init.ora参数中文说明

    并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | FALSE 默认值: FALSE row_locking: 说明: 指定在表已更新或正在更新时是否获取行锁。如果设置为 ALWAYS, 只有在表被更新后才获取...

    Windows 系统错误代码简单分析

     0288 试图释放不属于调用者的多路同步信号。  0298 信号投递的次数太多。  0299 仅完成部分 ReadProcessMemory 或 WriteProcessMemory 请求。  0300 操作锁定请求被拒绝。  0301 系统接收了一个无效的...

    操作系统相关的部分面试题

    ## 1. 进程和线程的区别? * 调度:进程是资源管理的基本单位,线程是程序执行的基本单位。...* 协程能保留上一次调用时的状态。 ## 3. 并发和并行有什么区别? 并发就是在一段时间内,多个任务都

    API自动化测试邮递员

    参数化您的请求:使用我们内置的动态变量库来生成动态虚拟数据,以测试同一请求具有不同值的多次迭代。 检查任何大小的响应:查看状态码,响应时间和响应大小。 Postman的自动语言检测,链接和语法突出显示,搜索...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    全书分6篇共25章,主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows...

    windowsnt 技术内幕

    备份Windows NT的注册表 备份磁带集的循环 理解备份记录和存储循环 设置备份选项 使用Windows NT备份恢复数据 为一次计划好的备份工作创建一个备份脚本文件 使用AT命令调度一次备份 NT备份程序在并行设备上的使用 ...

    JSTL详细标签库介绍

    <BR>Java使用和C++类似的异常处理<BR>1、处理错误的方法有很多流行方法<BR>2、一般方法是把程序处理代码段分散到系统代码中,在可能发生错误的地方处理错误优点:便于程序员能够条理的看到程序中异常的处理缺点:...

    okhttp:Square针对JVM,Android和GraalVM精心设计的HTTP客户端

    如果您的服务具有多个IP地址,则在第一次连接失败时,OkHttp将尝试使用备用地址。 这对于IPv4 + IPv6和冗余数据中心中托管的服务是必需的。 OkHttp支持现代TLS功能(TLS 1.3,ALPN,证书固定)。 可以将其配置为回...

    giCell zlg-gui

    锁的多次嵌套调用; 8. 其它对象的等待方式有:优先级等待和先进先出(节省内存)等待,在创建时设置; 9. 内核数据的同步,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它 地方均以延迟过程...

    Android项目源码开源的 Material Design 豆瓣客户端.zip

    使用豆瓣是为了获取信息,但信息的获取是基于条目和算法,还是基于友邻和人,这个问题在豆瓣的多次改版中大概一直悬而未决。 这次,一个叫“豆瓣”的应用选择的是基于条目的推荐。但我个人作为一个重度豆瓣用户,...

Global site tag (gtag.js) - Google Analytics