ajax集成proise代码(默认只开放了post和get方法,其他可自己拓展)
//集成promise的ajax请求(默认设置post和get请求,如有其他需求,可自己拓展) promiseAjax:function (url,data,type){ if (!window.Promise) tool.createPromise(); //保证浏览器的兼容性 return new Promise(function(resolve, reject){ if (type === undefined) ajax.post(url,data,resolve,reject); else ajax.get(url,data,resolve,reject); }); },测试环节
对于网上很多人写的Promise代码仔细观摩和研究,发现很多问题。
a. 对于并发Promise,会出现异步错乱,发起者和接受者错乱
b. 对于多then的情况,异步响应的不确定(高低延迟),错乱。
c. Promise代码实现的复杂性,多繁琐,难理解,思路不明确。
针对以上问题,进行重要测试。
测试前端代码
ajax.promiseAjax("api/ajax/postReq/",{"name":"q","age": 2}) .then(function(value){ console.log("一般请求q"+value); return ajax.promiseAjax("api/ajax/postReqSleep/",{"name":"w","age": 2}); }) .then(function(value){ console.log("高延迟请求w:"+value); return ajax.promiseAjax("api/ajax/postReq/",{"name":"r","age": 2}); }) .then(function(value){ console.log("一般请求r:"+value); }); ajax.promiseAjax("api/ajax/postReqSleep/",{"name":"q1","age": 2}) .then(function(value){ console.log("高延迟请求q1"+value); return ajax.promiseAjax("api/ajax/postReqSleep/",{"name":"w2","age": 2}); }) .then(function(value){ console.log("高延迟请求w2:"+value); return ajax.promiseAjax("api/ajax/postReq/",{"name":"r3","age": 2}); }) .then(function(value){ console.log("一般请求r3:"+value); });后端模拟延迟请求代码(C#)
[Route("postReqSleep")] public string postRequestTSleep([FromBody]Param param) { Thread.Sleep(5000); //挂起5s 做延迟 String result = "post请求成功:" + param.name + "-" + param.age; return result; }测试结果:
chromeie8-11
edge
firefox
360浏览器
safair
代码已集成github: https://github.com/GerryIsWarrior/ajax 点颗 星星 是我最大的鼓励,有什么问题可以博客、邮箱、github上留言
还有 最重要的一点 ,如果有问题欢迎指出来,我在github上维护这个库,这段时间专注于前端的通信技术的研究,ajax基本完成,马上进入SSE推送技术研究状态
研究Promise这个内容,研究和参考了很多别人的代码,从高别人的代码中看到了各种问题,然后在自己代码中测试发现和改正。所以没有什么是绝对正确的,我写的可能也有问题,希望大家在研究和发展的基础上一起改进。毕竟对于前端来说,技术更新太快,ES5 ES6等等一层接一层。还是那句老话,革命尚未成功,同志仍需努力,我和你们同在。
马上又要回去重新找工作了,希望可以找到如意的工作,毕竟为了错开金三银四,希望一切都会好起来。一起加油吧。
分享给小伙伴们:
本文标签: promise,ajax/">promise,ajax
相关文章
发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。
本类最热新闻