jamiechoo

 

Promise语法和回调函数基本格式

一、回调函数
案例一
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用法

 

posted on 2021-10-08 17:41  jamiechoo  阅读(58)  评论(0)    收藏  举报

导航