2021-10-28

Promise是JavaScript中用于处理异步操作的工具,它使得异步编程更加有序。传统的异步回调会导致代码嵌套,形成回调地狱。本文通过一个AJAX请求的例子展示了如何使用Promise将异步流程纵向展开,从而避免了回调函数横向发展的难题。在Promise中,通过.then()方法链式调用来处理异步结果,使得代码结构清晰易读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Promise异步编程

promise 是提供异步编程的容器,包含异步代码。在得到异步结果时需要通过resolve 传递数据,(reslove对应then所指定的函数,也就是单个过程的异步回调)

以ajax请求封装为例

function ajax(url , success) {
	var xhr = new XMLHttpRequest();
	xhr.open("GET",url);
	xhr.send();
	xhr.onreadystatechange = function(){
		if(xhr.status == 200 && xhr.readyState == 4){
			//将请求结果作为实参传入成功回调
			success(xhr.responseText);	
		}
	}
}
//如果两个异步过程有先后顺序,则会出现这种嵌套情况
ajax("http://localhost:8080/api/getgoodList",function(res){
	console.log(res);
	ajax("http://192.168.210.35:3000/api/getlist",function(res){
		console.log(res)
	})
})

Promise形式

function ajax(url){
	//promise容器包裹异步过程
	return new Promise(resolve => {
		var xhr = new XMLHttpRequest();
		xhr.open("GET",url);
		xhr.send();
		xhr.onreadystatechange = function(){
			if(xhr.status == 200 && xhr.readyState == 4){
				//将异步结果使用resolve进行传递
				resolve(xhr.responseText);	
			}
		}
	})
}
ajax("http://localhost:8080/api/getgoodList")
.then(res => {
	console.log(JSON.parse(res))
})
.then(() => {
	return ajax("http://192.168.210.35:3000/api/getlist")
})
.then(res => {
	console.log(JSON.parse(res))
})

它解决了回调函数横向发展的问题,变成了纵向发展结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值