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,讲得时候有些绕,梳理一遍好很多.
近期评论