promise ,浏览器错误

async function foo() {
    let p = new Promise((resolve, reject) => setTimeout(resolve, 1000, 3)); 
    console.log(await p);
}
foo(); // 3

之所以foo()的值为3,那是因为await 会把promise解包,p是一个已经resolve的的promise,await又将这个promise 进行了解包,所以,
console.log(await p)的值是3


单独的 Promise.reject()不会被异步函数捕获,而会抛出未捕获错误。不过,对拒绝的期约使用 await 则会释放(unwrap)错误值(将拒绝期约返回):
async function foo() { 
    console.log(1);
    await Promise.reject(3); 
    console.log(4); 
}
foo().catch(console.log); 
console.log(2);
// 1 // 2 // 3
这个时候,console.log(4) 不会

使用 throw 操作符时,代码立即停止执行

可以通过内置的错误类型来模拟浏览器错误。
每种错误类型的构造函数都只接收一个参数,就是错 误消息。下面看一个例子:
throw new Error("Something bad happened.");
 以上代码使用一个自定义的错误消息生成了一个通用错误。浏览器会像处理自己生成的错误一样来 处理这个自定义错误。换句话说,浏览器会像通常一样报告这个错误,最终显示这个自定义错误。当然, 使用特定的错误类型也是一样的,如以下代码所示:
  throw new EvalError("That doesn't evaluate.");
throw new URIError("Uri, is that you?");
throw new ReferenceError("You didn't cite your references properly.");
自定义错误常用的错误类型是 Error、RangeError、ReferenceError 和 TypeError。

ReferenceError 会在找不到对象时发生。(这就是著名的"object expected"浏览器错误的原 因。)这种错误经常是由访问不存在的变量而导致的,比如:
let obj = x; // 在x没有声明时会抛出ReferenceError

TypeError 在 JavaScript 中很常见,主要发生在变量不是预期类型,或者访问不存在的方法时。很 多原因可能导致这种错误,尤其是在使用类型特定的操作而变量类型不对时。下面是几个例子:
let o = new 10; // 抛出TypeError console.log("name" in true); // 抛出TypeError Function.prototype.toString.call("name"); // 抛出TypeError
在给函数传参数之前没有验证其类型的情况下,类型错误频繁发生

最后一种错误类型是 URIError,只会在使用 encodeURI()或 decodeURI()但传入了格式错误的 URI 时发生。这个错误恐怕是 JavaScript 中难得一见的错误了,因为上面这两个函数非常稳健。

1. 静态代码分析器
不得不说的是,通过在代码构建流程中添加静态代码分析或代码检查器(linter),可以预先发现非 常多的错误。这样的代码分析工具有很多,详见 GitHub Gist 网站 All Gists 页面。常用的静态分析工具
是 JSHint、JSLint、Google Closure 和 TypeScript。


击 DOM 树中一个节点,就可以在 Console(控制台)标签页中使用$0 引用该节点的 JavaScript 实例。它就跟普通的 JavaScript 实例一样,因此可以读取属性(如$0.scrollWidth),或者调用成员方 法(如$0.remove())。


debugger

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值