两年前就接触了Promise, 但是当时有点云里雾里,好像还写了个培训的PPT在公司内部传阅,现在真是觉得羞愧难当,最近经过实践又对Promise有了新的感悟,记录下来。
一 先从最开始异步调用的说起
我们都知道JS是单线程的(你不知道也没关系....),当我们需要进行一系列操作时,只能按照先来后到的顺序慢慢执行,这时候如果前面某个排队的任务比较耗时,程序就会阻塞,页面可能会出现空白。
我们常见的几种异步处理的方法,setTimeout、ajax请求,还有就是jquery里面的事件处理。
二 举个栗子
我们有一个异步操作,2s后生成一个user数据,然后判断这个user是不是成年人,在传统的异步操作过程中,我们啪啪啪写好了如下代码:
function generateUser() {
var names = ['keviy','goof','Kouth','WANG','Li'];
var age = Math.floor(Math.random() * 80);
var user = {
name:names[Math.floor(Math.random() * names.length)],
age: age
}
return user;
}
function getAdults(isAdultCallback) {
var user;
setTimeout(()=> {
user = generateUser();
console.log('数据请求回来了....');
isAdultCallback && typeof isAdultCallback === 'function' && isAdultCallback(user);
},2000)
}
function isAdultCallback(user) {
if(user){
if(user.age > 17){
console.log('adult user...');
} else {
console.log('not adult...');
}
}
console.log(user.name + ':' + user.age);
}
getAdults(isAdultCallback);