js的异步加载及promise的三种状态

Posted 糊涂一点web

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js的异步加载及promise的三种状态相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

js异步加载

同步加载

<script src="http://baidu.com/script.js"></script>  --->  我们平时经常使用的就是这种同步加载的形式
 
同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像)、渲染、代码执行。
 js 之所以要同步执行,是因为 js 中可能有输出 document 内容、修改dom、重定向等行为,所以默认同步执行才是安全的。
以前的一般建议是把<script>放在页面末尾</body>之前,这样尽可能减少这种阻塞行为,而先让页面展示出来。
 

异步加载

异步加载有几种方式,现在介绍以下两种常用的

  1. 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的三种状态的主要内容,如果未能解决你的问题,请参考以下文章

深入理解 promise:promise的三种状态与链式调用

JS中promise对象的作用与使用

JS异步加载的三种方式

JS异步加载的三种方式

怎么用promise实现异步控制

解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!