08.attempt 方法

使用方便有用的方法,以减少代码行数,提高我们的工作效率,增加我们的摸鱼时间。

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 的值为 []

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@大迁世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值