20200924岳浩天

知识总结

Promise

当有要求,下一个函数必须在前一个函数执行后,才能开始执行时,就使用promise

Promise的三个状态

三个状态: pending(挂起/等待)、fulfilled(成功)、rejected(失败)
三个状态的切换

执行new Promise()时,异步任务执行完之前,promise对象处于pending状态

当异步任务执行成功,我们调用resolve()时,整个promise对象就变成fulfilled状态,就自动调用.then()中的下一项任务

当异步任务执行过程中出错,我们调用reject()时,整个promise对象就变成rejected状态,就不再调用.then(),而是转向调用结尾的.catch()

Promise 实例具有then方法,then方法的第一个参数是resolve(成功)的回调,第二个参数(可选)是reject(失败)的回调

但是我们一般会使用catch方法来指定reject时的回调

var promise = new Promise((resolve, reject) => {
setTimeout(() =>{
false ? resolve("我是数据") : reject(new Error('我错了'))
}, 1000)
})
promise.then(
(data) => console.log(data)
).catch(
(err) => console.log(err)
)

在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。

例如:

getNumber()
.then(function(data){
console.log('resolved');
console.log(data);
console.log(somedata); //此处的somedata未定义
})
.catch(function(reason){
console.log('rejected');
console.log(reason);
});

输出结果:

resolved

5 //data的值

rejected

somedata is not defined

SQL

获取当前数据中的年份数值
select year(birthday) from emp;
获取当前数据中的月份数值
select month(birthday) from emp;

内连接
inner join…on…
实例
select ename,dname from lfemp inner join lfdept on deptId=did;
问题:无法查询出没有部门的员工,也无法查询出没有员工的部门
其他写法问题
1.select ename as 姓名,dname as 部门名称 from lfemp,lfdept;
问题:发生错误,笛卡尔积
2.select ename as 姓名,dname as 部门名称 from lfemp,lfdept where deptId=did;
问题:多表查询避免产生笛卡尔积,给查询添加条件(外键),但是无法查询出没有部门的员工,也无法查询出没有员工的部门

全连接
union 合并相同的项
(select ename,dname from lfemp left outer join lfdept on deptId=did)
union
(select ename,dname from lfemp right join lfdept on deptId=did);

​ union all 不合并相同的项
​ (select ename,dname from lfemp left outer join lfdept on deptId=did)
union all
​ (select ename,dname from lfemp right join lfdept on deptId=did);
​ 注意:mysql不支持 full join ..on..

心得

今天最大的收获就是梳理了一遍promise,讲得时候有些绕,梳理一遍好很多.

标签

评论

this is is footer