使用方便有用的方法,以减少代码行数,提高我们的工作效率,增加我们的摸鱼时间。
attempt 方法
功能:试图用提供的参数调用一个函数,能成功调用则返回函数所执行结果,否则返回一个错误对象。
有点抽象,稍后我们看看示例讲解。
实现
const attempt = (fn, ...args) => {
try {
return fn(...args);
} catch (e) {
return e instanceof Error ? e : new Error(e);
}
};
说明一下:
- 使用
try... catch
来捕获函数执行出错的情况,如果能执行成功则返回函数的执行结果,否则返回一个错误。 - 如果捕获的对象不是
Error
,则使用它创建一个新的Error
。
示例
var elements = attempt(function (selector) {
return document.querySelectorAll(selector);
}, ">_>");
if (elements instanceof Error) elements = []; // elements = []
解释一下:
attempt(function(selector) {
return document.querySelectorAll(selector);
}, '>_>')
内部执行后的结果是:
function(selector) {
return document.querySelectorAll(selector);
}
此时的 selector 为 '>_>'
,返回document.querySelectorAll('>_>')
,又因为 '>_>'
不是一个合法的选择器,所以执行过程会报错,由 try... catch
捕获,最终的结果是返回一个错误对象。
所以if (elements instanceof Error)
成立,elements
的值为 []