异步请求- 聊聊 xhr与 fetch区别

// 聊聊 浏览器使用 fetch(promise风格) 发送请求
    /**
     * 网络请求:
     *  xhr:
     *     ajax(xhr封装)
     *     axios(promise风格)
     *  
     * xhr:请求分为 3个阶段
     *      1、发送请求
     *      2、请求成功或失败
     *      3、成功则接收数据,失败则返回失败原因
     * 
     *  fetch:(promise风格)
     * 
     *  fetch:特点 使用了 关注分离设计思想(设计模式)
     *  将请求分为 4个阶段
     *      1、发送请求
     *      2、检查是否联系上服务器
     *      3、请求成功或失败
     *      4、成功则接收数据,失败则返回失败原因
     */

	//fetch 封装
	send = () =>{
        return async (e) =>{
            const url = "http://localhost:3000/students";
            if (e.keyCode === 13) {
            let { value } = e.target;
				
				//简单写法
                fetch(url).then(
                    response =>{
                        console.log('联系服务器成功');
                        return response.json()
                    },
                    Error =>{console.log('联系服务器失败',Error);},
                ).then(
                    Response =>{console.log('数据请求成功',Response);},
                    Error =>{console.log('数据请求失败',Error);}
                )

                // 小小优化
                fetch(url).then(
                    response =>{
                        console.log('联系服务器成功');
                        return response.json()
                    },
                    Error =>{
                        console.log('联系服务器失败',Error);
                        // 如果联系服务器失败就不执行后面的then()内容
                        return new Promise(()=>{})
                    },
                ).then(
                    Response =>{console.log('数据请求成功',Response);},
                    Error =>{console.log('数据请求失败',Error);}
                )

                // 进一步优化
                fetch(url).then(
                    response =>{
                        console.log('联系服务器成功');
                        return response.json()
                    }
                ).then(
                    Response =>{console.log('数据请求成功',Response);},
                ).catch(error =>{
                    console.log('请求失败',error);
                })

                // 使用 async await 优化
                try {
                    let response = await fetch(url);
                    let data = await response.json();
                    console.log(data);
                } catch (error) {
                    console.log('请求失败',error);
                }
                



            }
        } 
    }
                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值