最近做了一个智能家居的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(){ //前端全栈交流学习圈:866109386var me = this;// 面向1-3年经验前端开发人员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();
复制代码

异步是javascript的精髓相关推荐

  1. JavaScript语言精髓与编程实践(第2版)

    JavaScript语言精髓与编程实践(第2版)  周爱民 著 ISBN 978-7-121-15640-3 2012年3月出版 定价:79元 16开 476页 宣传语:以JavaScript视角看整 ...

  2. 《Javascript 语言精髓》读书心得

    <Javascript 语言精髓>读书心得 看了<Javascript 语言精髓>一书,记录下一些要点,以供以后学习查阅. 对象 JavaScript简单类型有数字.字符串.布 ...

  3. html js异步绑定,JavaScript异步机制介绍

    异步就是代码执行的顺序,并不是按照从上到下的顺序一次性执行,而是在不同的时间段执行,一部分代码在"未来执行".本文就来为大家介绍一下JavaScript中的异步机制. 单线程异步执 ...

  4. php js 异步上传图片,javascript实现异步图片上传方法实例

    如何通过javascript写出异步图片上传?本文我们就和大家分享一些实例代码javascript实现异步图片上传.我们首先看下HTML代码实现的form提交部分.其中大家在测试的时候需要把test的 ...

  5. delphi异步与javascript

    delphi及C++ Builder异步处理与javascript 目录 delphi及C++ Builder异步处理与javascript 1.用于实现异步事件.异步方法.及其异步结果回调的可自定义 ...

  6. 了解JavaScript核心精髓(三)

    1.js判断对象是否存在属性. hasOwnProperty('property')  判断原型属性是否存在. "property" in o;  判断原型属性和原型链属性是否存在 ...

  7. Ajax异步与JavaScript的一些初浅认识

    向服务器请求数据的技术 有以下五种常用技术用于向服务器请求数据 XMLHttpRequest(XHR) Dynamic script tag insertion(动态脚本标签插入) iframes C ...

  8. 《javascript语言精髓与编程实践》--原型继承笔记

    1.直接量:直接量的值可以在声明的同时就确知了:有undefined.true/false.字符串.数值.正则表达式.null 2.表达式:由运算元.运算符组成的,并产生结果的语法结构:本身也是无法预 ...

  9. 《JavaScript语言精髓与编程实践》读书笔记二

    第3章非函数式语言特性 这一章首先介绍了语言的分类,命令式(结构化编程,面向对象编程),说明式(函数式等).而这一章,主要介绍JS的非函数式特点. 在开始之前,首先介绍了由"结构化编程&qu ...

  10. JQuery日记6.5 Javascript异步模式(一)

    理解力JQuery前实现异步队列,有必要理解javascript异步模式. Javascript异步其实并不严重格异步感,js使某些片段异步方式在将来运行,流不必等待继续向下进行. 在多线程的语言中最 ...

最新文章

  1. sdio接口_多种接口的谷歌Coral模块,总有一款适合您~
  2. ESP32 OTA 策略的优点与可能的问题
  3. Qt 5.12 LTS(长期维护版本)中Qt Quick的性能改进
  4. SAP CRM Interactive Report(交互式报表)里和服务订单相关的一些字段
  5. eclipse 汉化教程(语言包)
  6. [PAT乙级]1002 写出这个数
  7. react中绑定点击事件_在React中绑定事件处理程序的最佳方法
  8. 迄今为止最快的 JSON 序列化工具 Jil
  9. rabbitmq接口异常函数方法_分布式系统消息中间件——RabbitMQ的使用进阶篇
  10. 景观分析工具:arcgis中patch analysis模块
  11. CentOS系统是什么
  12. iOS项目内购(IAP)纯代码
  13. 电脑重装系统超详细完整教程图解
  14. c语言记账系统源程序,C语言会计记账管理系统.doc
  15. matlab安装及破解
  16. protel dxp2004第三讲之仿真设计
  17. 北京地铁拥挤度实时查询
  18. 这48条人际关系准则,会真正提升你的社交情商
  19. python调用其它程序
  20. 掩码、反掩码和通配符

热门文章

  1. gmssl java api,GmSSL-支持国密算法和标准的OpenSSL分支
  2. mysql主从 副本集,MongoDB的主从、副本集模式
  3. java证书不见了_java – 找不到证书链
  4. json获取key对应的值java_java 获取json字符串中key对应的值
  5. 通过两个简单的案例,让你明白ansible playbook的编写核心
  6. python教程原版_Python入门教程完整版(懂中文就能学会) pdf版+源码(讲义/笔记)
  7. while循环python输入质数_Python学习之[while]循环
  8. 力扣题目系列:290. 单词规律
  9. CS224N刷题——Assignment2.3_RNN:Language Modeling
  10. Python简化代码的操作有哪些