js的异步加载及promise的三种状态
Posted 糊涂一点web
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js的异步加载及promise的三种状态相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
js异步加载
同步加载
<script src="http://baidu.com/script.js"></script> ---> 我们平时经常使用的就是这种同步加载的形式
同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。
js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。
以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。
异步加载
异步加载有几种方式,现在介绍以下两种常用的
- async: async的定义和用法(是html5的属性)
async 属性规定一旦脚本可用,则会异步执行。
示例:
<script type="text/javascript" src="demo_async.js" async="async"></script>
注:async 属性仅适用于外部脚本(只有在使用 src 属性时)
注:有多种执行外部脚本的方法:
- 如果不使用 async 且 defer="defer":脚本将在页面完成解析时执行
- 如果 async="async":脚本相对于页面的其余部分异步地执行(当页面继续进行解析时,脚本将被执行)
- 如果既不使用 async 也不使用 defer:在浏览器继续解析页面之前,立即读取并执行脚本
2.创建js脚本,插入到DOM中,加载完毕后进行callBack,例:
function loadScript(url, callback){ var script = document.createElement_x("script") script.type = "text/javascript"; if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == "loaded" || script.readyState == "complete"){ script.onreadystatechange = null; callback(); } }; } else { //Others: Firefox, Safari, Chrome, and Opera script.onload = function(){ callback(); }; } script.src = url; document.body.appendChild(script); }
promise的三种状态
promise我还似懂非懂,目前只知道有三种状态可以在不同的时候调用,以后实际过程中遇到我会再补充。
就酱,以上。
以上是关于js的异步加载及promise的三种状态的主要内容,如果未能解决你的问题,请参考以下文章