一、回调函数
案例一
function add(a,b,callback) {
var total = a+b;
if(typeof(a)=='number'){
callback&callback(total)//if callback{callback(total)}短路运算符
}else (
callback("不是数字")
)
}
add(1,2,function (tt) {
console.log(tt);
})
add("fd",2,function (tt) {
console.log(tt);
})
callback&callback()是短路运算符,只有前面为true才执行后面
案例二
// 1. 如果函数需要回调参数,一定是在参数的最后出现
// function getFileAsync(path, callback){
// if(错误){
// callback(new Error('xxx 错误'));
// }else{
// callback(null, data);
// }
// }
// 2. 错误优先的回调函数
function isEvenOrOdd(number, callback){
if(typeof number ==='number'){
if(number % 2){
// 奇数
callback(null, '当前传入的是奇数');
} else{
callback(null, '当前传入的是偶数');
}
}else{
throw new Error('你传入的不是数字');
callback(new Error('你传入的不是数字'));
}
}
// 约定将错误信息作为回调的第一个参数
isEvenOrOdd(10, (error,data)=>{
if(error) throw error;
console.log(data);
});
isEvenOrOdd(11, (error,data)=>{
if(error) throw error;
console.log(data);
});
isEvenOrOdd('asda', (error,data)=>{
if(error) throw error;
console.log(data);
});
二、Promise写法
在Promise中可以通过.then的第二个参数获取reject(),也可以通过.catch获取
案例一
function add2(a, b) {
var total = a + b;
return new Promise(function (resove, reject) {
if (typeof(a) == 'number') {
resove(total)
} else {
reject("不是数字")
}
})
}
//通过.catch获取错误
add2("fdf",2).then(function (tt) {
console.log(tt);
}).catch(function (tt) {
console.log(tt);
})
//连续调用中的错误获取,通过.then的第二个参数获取
add2(3, 2)
.then((t1) => {
console.log(t1);
return add2("fd", 3)
}, (t2) => {
console.log(t2);
return add2("fd", 3)
})
.then((c1) => {
console.log(c1);
}, (c2) => {
console.log(c2);
})
案例二Ajax的Promise用法