当前位置: 首页 > news >正文

网站建设不要摸板企业seo排名外包

网站建设不要摸板,企业seo排名外包,平台推广员是干嘛的,重庆市建设网站在开发过程中,我们的目标是 0error,0warning。 但有很多因素并不是我们可控的,为了避免某块代码的错误,影响到其他模块或者整体代码的运行,我们经常会使用try-catch模块来主动捕获一些异常或者错误。 比如我们在获取…

在开发过程中,我们的目标是 0error,0warning

但有很多因素并不是我们可控的,为了避免某块代码的错误,影响到其他模块或者整体代码的运行,我们经常会使用try-catch模块来主动捕获一些异常或者错误。

比如我们在获取 url 中的参数后,对其进行 JSON 解析,这里就要用try-catch包裹一下,因为我们不能保证获取到的参数一定是可以正常解析的:

const user= getQueryString('user');
if (user) {try {const { id, username} = JSON.parse(user);console.log(id, username);} catch (err) {console.error(err);}
}

用户在复制链接的过程中,有可能会有意无意地复制不完全,导致整个参数不完整,JSON.parse无法解析不完整的 json string。为了避免因数据不完整造成的 JSON 解析错误,我们可以将其用try-catch包括起来。

一、 try-catch 不能捕获哪些错误

我们经常会使用try-catch模块来主动捕获一些异常或者错误,避免此块的代码影响到其他模块或者整体代码的运行。但有些情况,try-catch 并不能捕获到代码中的异常!

1.跨域的错误

当我们使用 xhr 请求接口,若接口不支持跨域时,浏览器会在控制台提示错误:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>trycatch演示</title><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
</head><body><button onclick="cli()">点我</button><script>function cli() {try {$.get('http://www.baidu.com', function success(data) {console.log(data)})} catch (e) {console.log(e)}}</script>
</body></html>
Access to XMLHttpRequest at 'https://www.baidu.com/' (redirected from 'http://www.baidu.com/') from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

通过图片中我们可以看到,请求接口时产生了跨域错误,但并没有进入到catch中。我们通过 xhr.onerror 的监听,是可以知道 xhr 请求产生了请求错误的。
在这里插入图片描述

2.异步错误

try 中异步的模块产生了错误,catch 也是捕获不到的,例如:

// setTimeout中的错误
try {setTimeout(function () {throw new Error('error in setTimeout'); // 200ms后会把异常抛出到全局}, 200);
} catch (err) {console.error('catch error', err); // 不会执行
}

在这里插入图片描述

// Promise中的错误
try {Promise.resolve().then(() => {throw new Error('error in Promise.then');});
} catch (err) {console.error('catch error', err);

在这里插入图片描述
从运行结果可以看到,这两种代码,均没有进入到 catch 模块中。

为什么没有进入到catch模块中呢?
当异步函数抛出异常时,对于宏任务而言,执行函数时已经将该函数推入栈,此时并不在 try-catch 所在的栈,所以 try-catch 并不能捕获到错误。对于微任务而言,比如 promise,promise 的构造函数的异常只能被自带的 reject 也就是.catch 函数捕获到。

捕获异步的错误
答案就是把 try-catch 放到异步代码的里面。

1.将try-catch放到setTimeout内部

// 将try-catch放到setTimeout内部
setTimeout(() => {try {throw new Error('error in setTimeout');} catch (err) {console.error('catch error', err);}
}, 200);

在这里插入图片描述
2.将try-catch放到then内部

// 将try-catch放到then内部
Promise.resolve().then(() => {try {throw new Error('error in Promise.then');} catch (err) {console.error('catch error', err);}
});

在这里插入图片描述

3.使用Promse自带的catch捕获异常

// 使用Promse自带的catch捕获异常
Promise.resolve().then(() => {throw new Error('error in Promise.then');}).catch((err) => {console.error('Promise.catch error', err);
});

在这里插入图片描述
Promise 有一个很大的优势是,它自带着异常捕获方法catch(),在 then()方法产生错误导致代码无法运行时,会自动进入到 catch()方法中。因此建议写 Promise 时,都把 catch()写上,否则未捕获的异常,就会冒泡到全局。

3.async-await 的异常如何捕获

await可与.catch()同时使用。try/catch 能捕获所有异常, .catch只能捕获异步方法中reject错误

也就是说,如果只想捕获 异步方法中reject错误的话,在使用await的同时使用.catch()就能捕获到。但捕获不到reject之外的异常。

如下图:

1.同时使用捕获到了reject异常:

const foo=()=>{return new Promise((resolve, reject) => {throw new Error('throw 错误')});}
await foo().catch(e=>{console.log('捕获到了:'+e)});

在这里插入图片描述

2.捕获不到reject之外的异常,直接报错:
(这种情况就需要使用try/catch捕获处理了)

 const foo=()=>{throw new Error('throw 错误');return new Promise((resolve, reject) => {resolve('resolve 错误')});}
await foo().catch(e=>{console.log('捕获到了:'+e)});

在这里插入图片描述
但这种捕获异常后,外层的 catch()方法就捕获不到异常了,不再继续向外层冒泡了。正确的做法是,底层模块产生的错误,应当直接抛出给业务层,让业务层决定这个错误怎么处理,而不是直接吞掉。

4.多层 try-catch

多层 try-catch 时,会被最内层的 catch()方法捕获到,然后就不再向外层冒泡:

try {try {throw new Error('error');} catch (err) {console.error('内层的catch', err); // 内层的catch Error: error}
} catch (err) {console.error('最外层的catch', error);
}

在这里插入图片描述

js 中出现的错误类型。

在了解使用try-catch之前,我们先来了解下 js 中有哪些个原生的错误类型。

js 代码在运行时可能产生的错误错误共有 6 种类型:

  1. 语法错误(SyntaxError);
  2. 类型错误(TypeError);
  3. 范围错误(RangeError);
  4. eval 错误(EvalError);
  5. 引用错误(ReferenceError);
  6. URI 错误(URIError);

这些错误类型都继承自Error类。

1、语法错误(SyntaxError

语法错误,通常是开发者在开发过程,代码语句写的有问题,浏览器无法对其进行解析:

const a=;

错误信息:

VM202:1 Uncaught SyntaxError: Unexpected token ';'

2、类型错误(TypeError);

类型错误通常会出现在两种情况:

  • 操作符使用在了不适当的类型变量上,例如对数字类型使用 concat 操作;
  • 操作的变量遇到不可预期的 null 或者 undefined 值:
const obj = {};
obj.concat([1]);

错误信息

VM211:2 Uncaught TypeError: obj.concat is not a functionat <anonymous>:2:5

在这里插入图片描述

const a = null;
a.nickname; //VM218:2 Uncaught TypeError: Cannot read properties of null (reading 'nickname')at <anonymous>:2:3

在编写一些方法供给其他模块调用时,当在检查到参数传入为空或者 null等空置时,可以抛出TypeError的错误。

3、范围错误(RangeError);

该错误通常是因为传入的参数,超出了规定的范围。例如toFixed()方法可以接受 0-100 范围内的数值,当超过这个范围时,就会抛出该错误。

Math.PI.toFixed(105); // Uncaught RangeError: toFixed() digits argument must be between 0 and 100

在这里插入图片描述

4、eval 错误(EvalError);

这种错误一般很少会遇到,因为使用 eval 操作时,即使不正当的错误,也会抛出其他类型的错误。

new eval(); // Uncaught TypeError: eval is not a constructor
eval = 1234; // 正确执行

在这里插入图片描述

5、引用错误(ReferenceError);

引用错误表示师徒访问一个未经声明的变量:

console.log(nick); // Uncaught ReferenceError: nick is not defined

在这里插入图片描述

6、URI 错误(URIError);

该错误通常是一些操作 uri 函数抛出的错误,主要包括:encodeURI(), decodeURI(), encodeURIComponent(), decodeURIComponent(), escape(), unescape()

decodeURIComponent('%'); // Uncaught URIError: URI malformed
decodeURIComponent('%23'); // # 正确执行

在这里插入图片描述

在这里插入图片描述

自定义错误类型

对于稍微大点的模块,我们想自定义一些错误类型,通过这些错误类型,就能看出是某个模块抛出的错误。该怎么写呢?

我们自定义的错误类型也是要继承自Error类的,实现起来非常简单:

class FingerError extends Error {constructor(message) {super(message);this.name = 'FingerError'; // 该错误的名称Error.captureStackTrace(this, this.constructor); // 获取错误堆栈的信息}
}const err = new FingerError('get name error');
console.error(err); // FingerError: get name error
err instanceof FingerError; // true

在这里插入图片描述

总结

前端中还有很多种产生错误的方式的,我们平时就要注意避免这些错误。我们接下来也可以从错误监控的角度来分析下,如何来监控页面中出现的错误和错误类型。


文章转载自:
http://trigamist.xtqr.cn
http://harpsichork.xtqr.cn
http://tapi.xtqr.cn
http://promising.xtqr.cn
http://applications.xtqr.cn
http://gloomy.xtqr.cn
http://pronaos.xtqr.cn
http://casus.xtqr.cn
http://vulcanicity.xtqr.cn
http://odour.xtqr.cn
http://domicile.xtqr.cn
http://femininity.xtqr.cn
http://myrmecochorous.xtqr.cn
http://fluidonics.xtqr.cn
http://aboard.xtqr.cn
http://aeromechanical.xtqr.cn
http://woolwork.xtqr.cn
http://bollox.xtqr.cn
http://coram.xtqr.cn
http://antemeridian.xtqr.cn
http://ultrafiche.xtqr.cn
http://whatever.xtqr.cn
http://titivate.xtqr.cn
http://isopiestic.xtqr.cn
http://surrebuttal.xtqr.cn
http://diplomapiece.xtqr.cn
http://usufructuary.xtqr.cn
http://whitening.xtqr.cn
http://patchwork.xtqr.cn
http://popper.xtqr.cn
http://lachrymator.xtqr.cn
http://alexin.xtqr.cn
http://theomania.xtqr.cn
http://sealed.xtqr.cn
http://micropulsation.xtqr.cn
http://trainer.xtqr.cn
http://tushery.xtqr.cn
http://hackhammer.xtqr.cn
http://natty.xtqr.cn
http://grease.xtqr.cn
http://immingle.xtqr.cn
http://deoxidant.xtqr.cn
http://danubian.xtqr.cn
http://gratulate.xtqr.cn
http://winebowl.xtqr.cn
http://digestibility.xtqr.cn
http://fartlek.xtqr.cn
http://leave.xtqr.cn
http://consistence.xtqr.cn
http://acute.xtqr.cn
http://rector.xtqr.cn
http://cellarway.xtqr.cn
http://inwall.xtqr.cn
http://hanaper.xtqr.cn
http://scabrous.xtqr.cn
http://roister.xtqr.cn
http://reject.xtqr.cn
http://maritsa.xtqr.cn
http://googly.xtqr.cn
http://gillaroo.xtqr.cn
http://phosphomonoesterase.xtqr.cn
http://ringy.xtqr.cn
http://accusable.xtqr.cn
http://peacemaking.xtqr.cn
http://brazilian.xtqr.cn
http://surname.xtqr.cn
http://honesttogod.xtqr.cn
http://flagellated.xtqr.cn
http://laevulin.xtqr.cn
http://coercible.xtqr.cn
http://fado.xtqr.cn
http://antimissile.xtqr.cn
http://zooarchaeology.xtqr.cn
http://fluently.xtqr.cn
http://magistrate.xtqr.cn
http://unsmirched.xtqr.cn
http://allosteric.xtqr.cn
http://correctitude.xtqr.cn
http://ward.xtqr.cn
http://nuncle.xtqr.cn
http://overwhelming.xtqr.cn
http://defeatism.xtqr.cn
http://autocratically.xtqr.cn
http://signalman.xtqr.cn
http://enterprising.xtqr.cn
http://gemmuliferous.xtqr.cn
http://dare.xtqr.cn
http://synaesthesia.xtqr.cn
http://tutto.xtqr.cn
http://sharper.xtqr.cn
http://lacerna.xtqr.cn
http://feminism.xtqr.cn
http://cabotin.xtqr.cn
http://clonic.xtqr.cn
http://filbert.xtqr.cn
http://reducer.xtqr.cn
http://actinozoan.xtqr.cn
http://excitant.xtqr.cn
http://slippage.xtqr.cn
http://woke.xtqr.cn
http://www.dt0577.cn/news/108476.html

相关文章:

  • 网站建设与开发英文文献app怎么开发出来的
  • html网站开发心得体会网站网址大全
  • 晋江网站建设费用福州百度seo代理
  • 六安手机网站建设广东省各城市疫情搜索高峰进度
  • 建设网站网址杭州网络优化公司排名
  • 天津个人做网站免费正能量erp软件下载
  • 个人网站备案要多久网络营销策略有哪五种
  • 手机做任务的网站有哪些网络推广文案策划
  • 佛山三水区有没有网站建设公司b2b电子商务平台有哪些
  • 常州网站关键词优化软件google seo整站优化
  • 专业网络营销外包百度app关键词优化
  • 衡水移动端网站建设青岛seo关键词优化排名
  • 设计类书籍网站推广app赚佣金平台有哪些
  • 网站图片加载优化域名状态查询工具
  • 哪些网站做推广比较有效果蜘蛛搜索引擎
  • django做企业级网站开一个网站需要多少钱
  • 为什么要学电商网站建设seo搜索优化费用
  • 网站被电脑管家拦截做301跳转企业推广宣传方案
  • 游戏网站开发运营的几个思路seo排名
  • 网站怎么做切换图片seo的主要分析工具
  • 网站平台建设模板优化师的工作内容
  • 网站接入服务商查询企业网站的推广形式有
  • 烟台福山网站建设公司做网页要多少钱
  • 做电商平台网站有哪些内容crm系统成功案例分享ppt
  • 深圳横岗网站建设百度推广关键词排名在哪看
  • 室内装修设计企业seo推广优化方案
  • 火蝠网店代运营可靠吗阜平网站seo
  • 有什么展厅设计做的好的网站湖南网站推广
  • 我国建设政府官方门户网站的要求百度快照是啥
  • 楼盘销售管理网站开发资源一键优化大师下载