[不忘初心,方得始终——大拿梦]
作为刚刚毕业的我,凭着自己的梦想一步步踏上前端的旅程,但是,这个路吧有点坎坷。
总是自以为是的自己了解很多,最起码一些概念是懂得,在工作中也会遇到问题,上网查查自己再修修补补也就好了,本来是自己写完了挺满意的,可是可是,就在这时问题来了:
我们的技术大拿 也就是我们(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的实例才会终止操作
心得:
虽然每次写代码都是为了完成任务,这完全偏离了我的初心,而这次从发现问题,分析问题到解决问题虽然不是我自己独立完成的,但是也给了我很多感悟,清楚地了解到自己关于代码的整理以及知识的储备不足,看来自己需要继续努力啊!!!
奋斗吧!!!
战斗中的小白!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。