关于Promise我的理解

网上关于Promise的文章非常之多,但我觉得Promise的难点不在语法上,而是在链式调用和错误处理部分。本文将主要就这两部分进行展开说明。

1. Promise的典型应用

Promise的提出,解决了异步函数回调地狱的问题,也更加符合开放封闭原则;

示例一:

原始写法:

1
2
3
4
5
6
7
image.onload = function() {
cb_success()
};

function cb_success(){
console.log('success');
}

Promise形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

function loadImg(src){
let pr = new Promise((resolve,reject)=>{
var img = document.createElement('img');
img.onload = function(){
resolve(img)
}
img.onerror = function(err){
reject('加载失败')
}
img.src = src;
}
)

return pr;
}

let pr = loadImg('https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super');

pr.then((img)=>{
console.log(img.width)
return img //注意这儿必须return img,后面的then才能访问到
}).then((img)=>{
console.log(img.height)
}).catch(err=>{
console.log(err)
})

阅读全文

兼容低版本浏览器情况下的前端工程化化方案探究

好久没写blog。最近半年来总感觉自己进入了一个瓶颈期,什么都知道一点,但具体到落地,总是遇到各种各样的问题。总而言之,就是自己的知识体系不够系统。但想要系统的提升,却总感觉无从下手,加上生活上的各种事情,心也总安静不下来。

处于瓶颈期总是很痛苦的。但是这半年来,从之前的不知道自己不知道,到逐渐的知道自己不知道,知道下一步要学什么,也总算慢慢迈出了通往下一个阶段的脚步。希望自己逐步走出瓶颈期与疲倦期,不忘初心,逐步实现自己的人生目标。

好了,步入正题,谈一下最近的研究内容。

因为房天下(搜房网)这边的业务要求,有一些对外的系统还是需要兼容低版本浏览器的(被三四线城市的地产经纪人对IE6,7的执着感动的不要不要的)。同时由于系统架构仍然采用较为传统的基于asp的后端渲染模式,前后端无法分离,所以这几年前端发展的很多解决方案是无法采用的(基于node的前台站,三大框架,webpack2/3),优化的范围也只能限于js脚本。好在之前项目的js开发基本处于野蛮生长状态,没有模块化,没有自动化打包编译,一切函数都是过程式,可以优化的空间还是很大的。

阅读全文

css居中完全指南(译文)

本文译自https://css-tricks.com/centering-css-complete-guide/ , 讲述了如何利用 css 来实现常见的水平和垂直居中。

人们一直都在抱怨CSS的设计者们,为什么一定要把一个简简单单的居中设计的如此困难。但我认为居中问题并不在于有多难,而是在于居中的使用场景非常多,对应到每种场景下的使用方法也因此各不相同。

那么接下来让我们来制作一个决策树,用来讲清楚什么情况下你应该使用什么方法来实现居中。希望它能有所帮助。

阅读全文