Promise封装公共方法的小技巧,无需try…catch
在日常的开发过程当中,我们经常会将一些公共的处理逻辑使用promise进行封装,再配合async、await进行使用
我们知道,await后面的promise如果失败的话,会抛出错误,所以我们需要在使用的时候,进行try…catch来处理异常,每次都写try…catch比较麻烦,这里有一个简单的小技巧,可以不用写try…catch
可以在封装公共函数的时候,在return时先进行一次then和catch方法,返回一个数组,存放了错误和结果,这样promise错误,会先进入catch当中,由catch进行处理,处理完成之后,再到我们调用的地方,我们在调用时就无需进行try…catch了
const commonHandler = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
// resolve("成功");
reject("失败");
}, 1000);
}).then((res) => {
// 成功相关的处理逻辑...
return [null, res];
}).catch((err) => {
// 失败相关的处理逻辑...
return [err, null];
});
};
const main = async () => {
let [error, result] = await commonHandler();
// 进行判断,存在error,则return,不进行下面的逻辑
if (error) { return alert("promise失败"); }
// error不存在,则进行进行下面的逻辑
console.log(result);
};
main();
简写形式:
const commonHandler = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject("失败");
}, 1000);
}).then(res => [null, res]).catch(err => [err, null]);
};