异步是javascript的精髓
2018-07-09 13:47:18来源:博客园 阅读 ()
最近做了一个智能家居的APP,目前纯JS代码已经4000多行,不包括任何引入的库。还在不断升级改造中。。。这个项目到处都是异步。大多数都是3~4层调用。给我的感觉就是异步当你习惯了,你会发现很爽。下面举个最简单的例子?
你知道怎么返回一个异步调用的值吗?
也许你会这么干
function getValue(){ var a = 10; setTimeout( function(){ a += 10; }, 10 ); return a; }
你肯定得不到你想要的20
function test(){ var res = getValue(); return res; }
console.log( test() ); //结果10
为什么?
因为settimeout的原因,把a += 10放在队列中,等所有的同步代码完成之后,才轮到他执行。所以return的时候,这个a += 10 是没有执行的,而且你也不知道,异步到底什么时候完成? 这个是不确定的,哪怕你设置了10ms,未必是10ms。。。。如果队列前面有耗时较长的其他任务,10ms还是得不到响应。。。这样的例子太多了。比如,我最近的项目,控制空调的关和开。。很显然,这个时间受制于网络和芯片,以及空调的响应。。并不是设置了多长时间,就是那个时间返回。
那不知道他什么时候,返回,怎么拿到他的值?
用回调!
function getValue2( fn ){ var a = 10; setTimeout( function(){ a += 10; fn && fn( a ); }, 10 ); return a; }
function test2(){ getValue2( function( res ){ console.log( res ); } ); }
test2();
你GET到了吗?
下面就是一个简单的异步调用了:
var Q = { a : [], in : function( v ){ if( !/number|function/.test( typeof( v ) ) ) return; this.a.push( v ); return this; }, out : function(){ var me = this; var v = me.a.shift(); if( !v ) return; if( typeof( v ) == 'function' ) { v(); me.out(); return; } setTimeout( function(){ me.out(); }, v ); } } function watch( res ){ var oDiv = document.createElement( "div" ); oDiv.innerHTML = res; // console.log( res ); document.body.appendChild( oDiv ); } Q.in( function(){ watch( "1 <strong style='color:red'>延时3秒 -->输出2</strong>" ); }) .in( 3000 ) .in( function(){ watch( "2 <strong style='color:green'>延时2秒 -->输出2</strong>" ); } ) .in( 2000 ) .in( function(){ watch( "3 <strong style='color:blue'>后面没有了</strong>" ); } ).out();
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- javascript面向对象入门基础详细介绍 2020-03-29
- JavaScript函数表达式详解及实例 2020-03-25
- 如何用javascript连接access数据库 2020-03-20
- js中去掉字串左右空格 2020-03-20
- Javascript中的经典技巧 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash