当前位置: 首页 > news >正文

方案图网站太原注册公司网站

方案图网站,太原注册公司网站,旅游交友的网站建设,中国最大的软件公司排名该迭代已作废#xff0c;最新的请移步这里#xff1a;https://www.cnblogs.com/GerryOfZhong/p/10726306.html 距离上一篇博客书写#xff0c;又过去了大概几个月了#xff0c;这段时间暂时离开了这个行业#xff0c;让大脑休息一下。一个人旅行#xff0c;一个人休息最新的请移步这里https://www.cnblogs.com/GerryOfZhong/p/10726306.html       距离上一篇博客书写又过去了大概几个月了这段时间暂时离开了这个行业让大脑休息一下。一个人旅行一个人休息正好也去完成一个目标 --- 拥有自己的驾照。当然也把自己晒的黑漆马虎的。不过这一段时间虽然在技术上没有学太多东西但是在心态上给了自己一个沉淀的机会感觉自己变得更加沉稳和成熟感觉这就是自己需要找到的自己回归自我。好了废话不多说了虽然技术上没有学一些新的东西但是欠的东西还是要补回来的。正如这篇博客前端Promise规范的实现与ajax技术的集成当时github上一个用户提的既然写了ajax那么Promise的规范更优雅的操作异步也应该有的当时记下了现在补回来。回归正题下面介绍一些概念。 Promise   ES6中最重要的特性之一就是代表了未来某个将要发生的事件通常是一个异步操作。它的好处在于有了Promise对象就可以将异步操作以同步操作的流程表达出来避免了层层嵌套的回调函数。js对象的继承和传递  在js中是没有所谓的继承概念的继承通常是指后台面向对象编程中对象之间的复用。因为js被叫做脚本语言所以没有这个概念但是在js中都可以模拟实现的apply,call,prototype。其实说通俗点所谓的继承就是作用域的传递。ajax和promise的缘分  因为ajax是一个异步的请求虽然也可以使用同步而promise这个状态机也正好可以处理异步操作。两者的相结合的产物将是一个优雅而又快捷的产物这个将在后面的介绍中展现。  工具准备     1. 前端代码自己实现的promise规范代码以及集成现有es6规范的代码。     2. nginx服务器做分离反向代理后台代码     3. IIS服务器部署后台请求模拟一般请求和高延迟请求     4. 各大兼容和不兼容promise的浏览器做测试   前端Promise代码实现 /*** Created by gerry.zhong on 2017/6/21.*/ var Promise function(fn){var promise this;//状态机的状态var PROMISESTATE {PENDING : 0 ,FULFILLED : 1 ,REJECTED : 2};//存储当前变量的回调函数和标记对象为promisepromise._fullCalll [],promise._rejCall [];promise._name promise;//执行过程中的状态变化(初始化状态为默认状态)var _state PROMISESTATE.PENDING;//回调函数的参数var _value undefined;//状态变更function setState(stateT,valueT){var promise this;_state stateT;_value valueT;handleFun.call(promise); //传递作用域并且执行回调函数};//根据状态处理回调function handleFun(){var promise this,isThen;if (_state PROMISESTATE.FULFILLED typeof promise._fullCalll[0] function) {isThen promise._fullCalll[0](_value);};if (_state PROMISESTATE.REJECTED typeof promise._rejCall[0] function) {isThen promise._rejCall[0](_value);};//对于是否可以继续进行then做判断// 1. 不可then的直接return结束条件无返回值、返回值不是promise对象的// 2. 对于可以then的将then的回调进行处理然后对象之间传递。if (isThen undefined || !(typeof isThen object isThen._name promise)) return;promise._fullCalll.shift(); promise._rejCall.shift(); //清除当前对象使用过的对调isThen._fullCalll promise._fullCalll;isThen._rejCall promise._rejCall; //将剩下的回调传递到下一个对象};//promimse入口function doResolve(fn){var promise this;fn(function(param) {setState.call(promise,PROMISESTATE.FULFILLED,param);}, function(reason) {setState.call(promise,PROMISESTATE.REJECTED,reason);});};//函数then处理回调返回对象保证链式调用this.then function(onFulfilled,onRejected) {this._fullCalll.push(onFulfilled);this._rejCall.push(onRejected);return this;}doResolve.call(promise,fn); } 具体思路如下   解决浏览器的差异性和兼容性代码 if (!window.Promise) tool.createPromise(); //保证浏览器的兼容性   tool.createPromise代码 //如果浏览器不支持Promise特性将用简易的promise代替(IE11-都不支持ES6 Promise)createPromise:function(){var newPromise function(fn){var promise this;//状态机的状态var PROMISESTATE {PENDING : 0 ,FULFILLED : 1 ,REJECTED : 2};//存储当前变量的回调函数和标记对象为promisepromise._fullCalll [],promise._rejCall [];promise._name promise;//执行过程中的状态变化(初始化状态为默认状态)var _state PROMISESTATE.PENDING;//回调函数的参数var _value undefined;//状态变更function setState(stateT,valueT){var promise this;_state stateT;_value valueT;handleFun.call(promise); //传递作用域并且执行回调函数};//根据状态处理回调function handleFun(){var promise this,isThen;if (_state PROMISESTATE.FULFILLED typeof promise._fullCalll[0] function) {isThen promise._fullCalll[0](_value);};if (_state PROMISESTATE.REJECTED typeof promise._rejCall[0] function) {isThen promise._rejCall[0](_value);};//对于是否可以继续进行then做判断// 1. 不可then的直接return结束条件无返回值、返回值不是promise对象的// 2. 对于可以then的将then的回调进行处理然后对象之间传递。if (isThen undefined || !(typeof isThen object isThen._name promise)) return;promise._fullCalll.shift(); promise._rejCall.shift(); //清除当前对象使用过的对调isThen._fullCalll promise._fullCalll;isThen._rejCall promise._rejCall; //将剩下的回调传递到下一个对象};//promimse入口function doResolve(fn){var promise this;fn(function(param) {setState.call(promise,PROMISESTATE.FULFILLED,param);}, function(reason) {setState.call(promise,PROMISESTATE.REJECTED,reason);});};//函数then处理回调返回对象保证链式调用this.then function(onFulfilled,onRejected) {this._fullCalll.push(onFulfilled);this._rejCall.push(onRejected);return this;}doResolve.call(promise,fn);};window.Promise newPromise;}, 这样就保证了不管在兼容和不兼容Promise的浏览器中都可以使用Promise优雅的来操作异步了。   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(一般请求qvalue);return ajax.promiseAjax(api/ajax/postReqSleep/,{name:w,age: 2});}).then(function(value){console.log(高延迟请求wvalue);return ajax.promiseAjax(api/ajax/postReq/,{name:r,age: 2});}).then(function(value){console.log(一般请求rvalue);});ajax.promiseAjax(api/ajax/postReqSleep/,{name:q1,age: 2}).then(function(value){console.log(高延迟请求q1value);return ajax.promiseAjax(api/ajax/postReqSleep/,{name:w2,age: 2});}).then(function(value){console.log(高延迟请求w2value);return ajax.promiseAjax(api/ajax/postReq/,{name:r3,age: 2});}).then(function(value){console.log(一般请求r3value);}); 后端模拟延迟请求代码(C#) [Route(postReqSleep)]public string postRequestTSleep([FromBody]Param param){Thread.Sleep(5000); //挂起5s 做延迟String result post请求成功: param.name - param.age;return result;}     测试结果   chrome   ie8-11   edge   firefox   360浏览器   safair     代码已集成githubhttps://github.com/GerryIsWarrior/ajax     点颗星星是我最大的鼓励有什么问题可以博客、邮箱、github上留言  还有最重要的一点如果有问题欢迎指出来我在github上维护这个库这段时间专注于前端的通信技术的研究ajax基本完成马上进入SSE推送技术研究状态   研究Promise这个内容研究和参考了很多别人的代码从高别人的代码中看到了各种问题然后在自己代码中测试发现和改正。所以没有什么是绝对正确的我写的可能也有问题希望大家在研究和发展的基础上一起改进。毕竟对于前端来说技术更新太快ES5 ES6等等一层接一层。还是那句老话革命尚未成功同志仍需努力我和你们同在。   马上又要回去重新找工作了希望可以找到如意的工作毕竟为了错开金三银四希望一切都会好起来。一起加油吧。转载于:https://www.cnblogs.com/GerryOfZhong/p/7096792.html
http://www.pierceye.com/news/338253/

相关文章:

  • 网站建设进度说明嘉兴公司制作网站的
  • 山东省建设注册管理网站手机免费网站制作
  • 台州网站制作套餐如何查询网站的主机
  • 毕业设计代做哪个网站好房产中介如何找客源
  • 怎么下载自己做的网站杭州互联网公司排名
  • 做曖視頻网站网站开发设计流程论文
  • 北京移动官网网站建设凡科做的网站好吗
  • 申请网站域名怎么做wordpress金融主题
  • 中国建设银行移动门户网站wordpress 生成html代码
  • dw网站建设框架大小设定广州分销商城开发
  • 网站一年的 运营费用一般企业网站建设合同
  • 九龙坡集团网站建设贵阳网站建设推广
  • 架设网站 自己购买服务器无锡seo网站推广费用
  • 网站关键词长度开平 做一网站
  • 青海制作网站可以网站可以做免费的文案广告
  • 深圳维特网站建设有彩虹代刷源码怎么做网站
  • 有了自己的网站怎样做后台食品建设网站前的市场分析
  • 制作伪装网站微餐饮网站建设
  • 泰州做网站软件哈尔滨网站建设市场分析
  • 手机网站建设口碑好网站的技术建设
  • 论坛类网站备案wordpress分享qq
  • 做化工的在哪个网站做平台好长期做网站应该购买稳定的空间
  • 网站建设 推广找山东博达制作网页难吗
  • 临安网站设计海口h5建站模板
  • 网站建设济南云畅网络技术有限公司厦门最新通告
  • ozon电商平台seo关键词搜索和优化
  • 网站收录查询情况科技网站导航
  • 如何做有后台的网站模板网站和定制网站的优劣势对比
  • 在360网站做公告怎么弄南平建设企业网站
  • 网站建设电影动漫制作专业什么电脑最适合