百度t7 教程 es6学习笔记 02 promise 使用

promise 使用 

 

首先看下回调地狱!

// 在这里我准备去发送异步请求
        // 1,先去获取1.txt 中的内容,若成功了,就再去获取2.txt 中的内容!
        //,引入jQuery ,用它封装的 ajax 去写代码
        
        // 由于我对 jQuey ajax  还不太熟悉,所以我去查下!
        
        // 以下就是回调里面套回调,形成回调地狱

<head>
	<meta charset="UTF-8">
	<title>test</title>

	<script src="jQuery.js"  type = "text/javascript"></script>
</head>
<body> 
	<button id = "oBtn">我的 热情,好像 一把火</button>
	<p>爱生活,爱编程</p>
	<script>
// $.ajax({ url: "test.html", context: document.body, success: function(){
//         $(this).addClass("done");
//       }});

window.onload = function(){
	var oBtn= document.getElementById('oBtn')
	var oText = document.getElementsByTagName('p')[0]
	oBtn.onclick = function(){
		// 在这里我准备去发送异步请求
		// 1,先去获取1.txt 中的内容,若成功了,就再去获取2.txt 中的内容!
		//,引入jQuery ,用它封装的 ajax 去写代码
		
		// 由于我对 jQuey ajax  还不太熟悉,所以我去查下!
		
		// 以下就是回调里面套回调,形成回调地狱

		$.ajax({
			url:'1.txt',
			success(str){
				console.log('successget ')
				//在这边能不错的去获取数据
				console.log(str)
				$.ajax({
					url:'2.txt',
					success(str2){
						oText.innerHTML= str2
					}
				})

			},
			error(err){
				console.log('获取数据失败')
				console.log(err)
			}
		});
		
	}
}

	</script>

</body>

以上就是回调里套一个回调, 我 请求数据用的 是 jQuery 的ajax 

好 现在来了, 上面是异步的写法, 怎么写成  同步的操作呢!那么Promise  就来了

let p1 = new Promise(function(resolve,reject){
				$.ajax({
					url:'1.txt',
					success(str){
						resolve(str)
					}
				})
			})

			p1.then(function(str){
				console.log(str)
				$.ajax({
					url:'2.txt',
					success(str2){
						console.log(str2)
					}
				})	
			})

以上是  Promise 写法,是不是稍微有 点不一样,其实我告诉你,  promise 的理解,就是用同步的写法完成异步的操作

语法糖的功能 

上面还是  看 不出优势, 我加入有 多次 异步呢? 我思考下哈!

修改的代码如下: 

let p1 = new Promise(function(resolve,reject){
	$.ajax({
		url:'1.txt',
		success(str){
			resolve(str)
		}
	})
})

p1.then(function(str){
	//  第一请求,得到的结果
		console.log(str)
	return new Promise(function(resolve,reject){
			$.ajax({
				url:'2.txt',
				success(str2){
					resolve(str2)
				}
		})		
	})		
}).then(function(str2){
	// 第二次请求得到的结果!	
	console.log(str2)
	//再这里 可以去进行第三次请求!!
	

})

}

这个就可以无限 用,同步方式 去 写异步代码了,就是说 

在 then 方法中,返回一个 Promise 对象就可以无限then 下去,

假如 , 有 10 来个 回调,用 这个 写起来不就很好看,

既有同步的  写法,又能得到异步的结果, 很不错!

上面的代码还是有 问题的,因为jQuery ajax 方法本身就返回  Promise 实例!

我先给大家补充下 jQuery ajax 写法!

var p2 = $.ajax({
			url:'1.txt',
			dataType:'text'
		})

		console.log(p2)

上面的p2 就是Promise  对象, (对象== 实例) 只是叫法 不同, 相信 学过java 的同学 都知道,以后我会

 来回替换叫!

最终写法是 这个样子: 


		$.ajax({
			url:'1.txt',
			dataType:'text'
		}).
		then(data1=>{
			console.log(data1)
			return $.ajax(
			{
				url:'2.txt',
				dataType:'text'
			})
		}).
		then(str2=>{
			console.log(str2)
		})

相信经过上面的代码,大家已经 深刻的明白了promise 的用法了,可见 es6 就是为了让大家写代码写起来简单

反正最后还得编译成es 5 这个我就不扯了!

genertor 的 使用  我 再单写一篇

猜你喜欢

转载自blog.csdn.net/qq_15009739/article/details/82557751