javascript实现异步的方法

  介绍

这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate方法;3、使用requestAnimationFrame方法;4、监听新形象加载状态;5、监听脚本加载状态方法。

本教程操作环境:windows7多系统,javascript1.8.5版,戴尔G3电脑。

<强> javascript实现异步的方法:

<强> 1,setTimeout:这个是最简单的

setTimeout(,函数(){   ,,,console.log (1);   });   console.log (2);

<强> 2,setImmediate: IE10添加的新功能,专门用于解放ui线程.IE10以下及其他浏览器不支持

setImmediate(函数(){   ,,,console.log (1);   });   console.log (2);

<强> 3,requestAnimationFrame: HTML5和CSS3时代新产物,专门用于动画。低级浏览器不支持

var  asynByAniFrame =,(函数(){   ,,,var  _window =,窗口,   ,,,frame =_window.requestAnimationFrame   ,,,,,,,,,,,| |,_window.webkitRequestAnimationFrame   ,,,,,,,,,,,| |,_window.mozRequestAnimationFrame   ,,,,,,,,,,,| |,_window.oRequestAnimationFrame   ,,,,,,,,,,,| |,_window.msRequestAnimationFrame;   ,,,return 函数(,callback ),{,框架(,callback ),};   }) ();   asynByAniFrame(函数(){   ,,,console.log (1);   })   console.log (2);

<强> 4,监听新形象加载状态:通过加载一个数据:图像数据格式的图片,并监听器加载状态实现异步。

尽管部分浏览器不支持数据:形象图片数据格式,但仍然可以触发其onerror状态实现异步,但IE8及以下对数据:图像数据格式的图片,onerror为同步执行

function  asynByImg (, callback ), {   ,,,var  img =, new 图像();   ,,,img.onload =, img.onerror =, img.onreadystatechange =,()函数,{   ,,,,,,,img =, img.onload =,=, img.onerror  img.onreadystatechange =,空;   ,,,,,,,回调(),,   ,,,}   ,,,img.src =,“数据:图像/png,“;   }   asynByImg(函数(){   ,,,console.log (1);   });   console.log (2);

<强> 5,监听脚本加载状态

原理同新形象是一样的,生成一个数据:text/javascript的脚本,并监听其加载状态实现异步。

尽管部分浏览器不支持数据:text/javascript格式数据的脚本,但仍然可以触发其onerror, onreadystatechange事件实现异步。

var  asynByScript =,(()函数,{   ,,,var  _document =,文档,   ,,,,,,,_body =, _document.body,   ,,,,,,,_src =,“数据:text/javascript,“   ,,,,,,,//异步队列   ,,,,,,,queue =, [];   ,,,return 函数(,callback ), {   ,,,,,,,,,,,var  script =, _document.createElement (“script");   ,,,,,,,,,,,,,=,script.src  _src;   ,,,,,,,,,,,//添加到队列   ,,,,,,,,,,,队列[,queue.length ],=,回调;   ,,,,,,,,,,,script.onload =, script.onerror =,=, script.onreadystatechange  function  (), {   ,,,,,,,,,,,,,,,script.onload =, script.onerror =,=, script.onreadystatechange 零;   ,,,,,,,,,,,,,,,_body.removeChild (, script );   ,,,,,,,,,,,,,,,script =,空;   ,,,,,,,,,,,,,,,//执行并删除队列中的第一个   ,,,,,,,,,,,,,,,queue.shift () ();   ,,,,,,,,,,,};   ,,,,,,,,,,,_body.appendChild (, script );   ,,,,,,,}   ,,,})();   asynByScript(,函数(){   ,,,console.log (1);   },);   null

javascript实现异步的方法