[不忘初心,方得始终——大拿梦]

    作为刚刚毕业的我,凭着自己的梦想一步步踏上前端的旅程,但是,这个路吧有点坎坷。

     总是自以为是的自己了解很多,最起码一些概念是懂得,在工作中也会遇到问题,上网查查自己再修修补补也就好了,本来是自己写完了挺满意的,可是可是,就在这时问题来了:

      我们的技术大拿 也就是我们(IT部)的超级boss要看效果,满心欢喜的给他展示我的效果,可是,问题尴尬了,想要看看我的代码。才有了我今日的心得。

问题:代码同步异步问题分析:原本的代码

$.ajax({ 

url:url, 

type: "get", 

dataType: "json", 

contentType: "application/json", 

success: function (obj) {

     dataObject.topicList = obj; 

}, 

error: function (XMLHttpRequest, textStatus, errorThrown) { 

     if (XMLHttpRequest.status == "401") { 

          self.location = '/enterprise/enterprise_login.html'; 

     } else { 

          alert(XMLHttpRequest.responseText); 

     } 

  } 

});

ajax我没有封装,页面的所有接口请求我皆是用这种方法写的

(function () { 

           $(".exit").click(function () { 

                window.location.href ='/enterprise/enterprise_login.html'; 

            }); 

           $(".clearContent").click(function () { 

                dataObject.text = ''; 

                dataObject.status = ''; 

            }); 

           postNetwork(1);

   })();

                
以上自执行函数我写到页面的全局作用域下

原本的思路:代码我是没有多想,写出来实现效果就好,对于代码冗余更是没有过多的想法代码同步异步问题,我只想到了ajax请求都是异步就好分析:对与代码的冗余自是要整理的,于是,部分代码进行了封装,当然,ajax请求的封装也是必然的:     

$.ajax({
    url: url,
    type: data == null ? 'GET' : 'POST',
    dataType: "json",
    data: data == null ? '' : JSON.stringify(data),
    async: true,
    contentType: "application/json",
    success: function (resp) {
        callback(resp);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {}
});

以上代码是我对ajax的封装。     

解决方案

    接下来说一下对于我(小白级)来说的大招了,就是Promise。我们公司每天早晨都会开早会说自己的工作进度,而老大会给评价也会和我们分享一些他的心得,也就是在早会的时候老大向我推荐了Promise这个对象:这个由ES6提供的原生提供的promise对象,通过then方法的两个参数(resolve,reject),resolve将正确的参数逐渐传递下去,而reject是 抛出 错误信息的。   

var p = new Promise(function (resolve, reject) {
    if(1){
        resolve();
    }else{
        reject();
    }
});

通过创建Promise的实例,该实例可以继承Promise这个对象原型上then方法, 只有会发出resolve()或reject()方法才会继续往下执行。首先then方法回调resolve()才会继续执行,而then()方法会按顺序执行,就是这个原理将我之前遇到的问题可以很完美的解决。注意:只有返回resolve(),回调动作才会被执行,如果返回reject(),以后的回调动作都不会被触发,但是会继续执行,而且Promise的实例一旦被触法就不会停止,直到所有then方法都被回调Promise的实例才会终止操作

心得:

    虽然每次写代码都是为了完成任务,这完全偏离了我的初心,而这次从发现问题,分析问题到解决问题虽然不是我自己独立完成的,但是也给了我很多感悟,清楚地了解到自己关于代码的整理以及知识的储备不足,看来自己需要继续努力啊!!!

奋斗吧!!!

战斗中的小白!!!


傻丫头睡觉
11 声望6 粉丝

引用和评论

0 条评论