Javascript基础知识体系化学习总结(四)异步

Javascript基础知识体系化学习总结(四)异步

一、单线程
1.javascript是单线程语言,只能同时做一件事,代码从上往下执行,一个个加载。
2.javascript和DOM渲染共用一个线程,即两者只能同时进行一个。
3.浏览器和node.js已经支持javascript启动进程,例如WebWorker。

二、callback
1.callback即是回调函数,是来处理异步的,至于为什么会出现异步的情况,是因为js单线程很可能导致我们加载某些内容的时候等待时间过长卡住。
2.callback本身不足,很容易引起回调地狱,不仅阅读困难,也很难去维护这些代码。

三、应用场景
1.同步和异步的区别:同步会阻塞代码的执行,异步不会阻塞代码的执行。
2.发送网络请求的时候例如请求一些资源(图片等等)。
3.出现定时任务的时候如setTimeout和setInterval。

四、Promise
1.为了解决使用callback产生的回调地狱,promise采用了并行的书写方式,区别于callback的嵌套方式。
2.关于具体如何使用promise,我们给出一个手写promise加载图片的函数熟悉一下:

<!DOCTYPE html>
<html>
<head>
	<title>手写promise加载图片</title>
</head>
<body>
<script type="text/javascript">
	function loadImage(src) { // 定义promise加载图片的方法
		const p = new Promise((resolve, reject)=>{ // 将整个promise赋值给一个变量,方便后面直接返回变量
			const img = document.createElement('img')
			img.src = src // 在DOM创建一个img标签并且指定图片地址为我们的传入的地址
			img.onload=()=>{
				resolve(img)
			} // 图片成功加载则触发resolve状态,并且返回img标签(带地址),调用者用.then接收
			img.onError=()=>{
				const err = `图片加载失败${src}`
				reject(err)
			} // 图片加载失败则触发reject,并且把错误信息传回去,调用者用.catch接收
		})
		return p // 返回变量
	}
	const url1 = 'https://www.3dmgame.com/uploads/images/thumbztfirst/20180824/1535097139_983975.jpg'
	const url2 = 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3719520752,2657134858&fm=26&gp=0.jpg'
	loadImage(url1) // 调用我们定义的方法
	.then((img)=>{
		console.log(img.width);
		return img // 成功加载第一张图片时打印其宽并且返回img标签,方便下一个then使用
	})
	.then((img)=>{
		console.log(img.width);
		return loadImage(url2) // 这里调用我们定义的方法,准备加载第二张图片
	})
	.then((img)=>{
		console.log(img.width);
		return img
	})
	.then((img)=>{
		console.log(img.height);
	})
	.catch((err)=>{
		console.log(err);
	})
</script>
</body>
</html>

好了,javascript的第四个模块大概就是这些内容了,我会将它分为11个模块然后13篇文章左右把它讲完(有的模块内容多会范围上下期大概。。。),学完这些模块相信大家对基础的js会有一个比较体系化的认识,那么大家加油,我是O5,我们下次见!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章