首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从一道让我失眠的 Promise 面试题开始,深入分析 Promise 实现细节

; } } function resolvePromise(promise2, x, resolve, reject) { // 如果相等了,说明return的是自己,抛出类型错误返回...捕获执行错误 捕获执行器中的代码,如果执行器中有代码错误,那么 Promise 的状态要变为失败 // MyPromise.js constructor(executor){ // ==== 新增...) } catch (error) { // 如果有错误,就直接执行 reject this.reject(error) } } 验证一下: // test.js const...; }); } } function resolvePromise(promise2, x, resolve, reject) { // 如果相等了,说明return的是自己,抛出类型错误返回...{ // 如果相等了,说明return的是自己,抛出类型错误返回 if (promise === x) { return reject(new TypeError('The promise

1.2K40

实现Promise,有手就行巨详细,不看血亏

原生Promise的捕获错误 原生Promise在遇到错误有两种可能 executor函数里面的代码有错误,但是没有被then的reject捕获,会修改Promise的状态为rejected,抛出错误...返回,不会抛出错误; 如果没有then捕获错误,就不会reject,然后抛出错误; 如果有catch捕获错误,就会把错误信息通过reject返回,不会抛出错误; 即只要错误有被Promise捕获到...,就会通过reject返回 没有Promise.then回调 // executor函数里面的代码有错误,但是没有被then的reject捕获,会修改Promise的状态为rejected,抛出错误...,但then里面没有第二个reject的回调函数,也捕获不到错误,会报错 // executor函数里面的代码有错误,但是没有被then的reject捕获,会修改Promise的状态为reject抛出错误...回调,且有reject回调 // executor函数里面的代码有错误,但是有被then的reject捕获,不会抛出错误,会修改Promise的状态为rejected,然后通过reject回调返回错误原因

63710
您找到你想要的搜索结果了吗?
是的
没有找到

NodeJS的异常捕获

错误异常有两种场景的出现, 一种是代码运行中throw new error没有被捕获 另一种是Promise的失败回调函数,没有对应的reject回调函数处理 针对这两种情况Nodejs都有默认的统一处理方式...') 但是try catch方式无法处理异步代码内出现的异常,你可以理解为执行catch时,异常还没有发生。...console.log(e.message) }) Promise同样无法处理异步代码抛出的异常 new Promise((resolve, reject) => { asyncError(...}) Promise中的异步错误 new Promise((resolve, reject) => { asyncError() }) .then(() => { //......注册事件和回调到domain,当发生一个错误事件或抛出一个错误时,domain对象会被通知,不会丢失上下文环境,也不导致程序错误立即退出,与process.on('uncaughtException')

5.5K50

JavaScript 错误处理大全【建议收藏】

中的错误处理 Promise.allSettled 中的错误处理 async/await 的错误处理 异步生成器的错误处理 Node.js中的错误处理 Node.js 中的同步错误处理 Node.js...type given, expected number"); 或者: throw new TypeError("Wrong type given, expected number"); 一般不会把异常抛出到函数或条件之外...它接收错误对象,可以在这里对其进行检查(远程发送到生产环境中的日志服务器)。 另外无论函数的执行结果如何,不管是成功还是失败,finally 中的所有代码都会被执行。...除了 Promise.reject 之外,可以通过抛出异常来退出 Promise 链。...] 如果这些 Promise 中的任何一个被拒绝,Promise.all 都会拒绝,返回第一个被拒绝的 Promise 中的错误

6.2K50

JavaScript错误处理完全指南

在创建错误之后,我们可以向用户发送一条消息,或者完全停止执行。 2 JavaScript 中有什么错误? JavaScript 中的一个错误是一个对象,错误会被 抛出 以暂停程序。...Promise错误抛出 作为 拒绝 Promise 的最佳实践,提供错误对象很方便: Promise.reject(TypeError("Wrong type given, expected a...除了 Promise.reject,我们还可以通过 抛出 异常来退出 Promise 链。...] 如果这些 Promise 中的任何一个被拒绝,Promise.all 都会拒绝,返回第一个被拒绝的 Promise 中的错误。...这时我们可以: 像之前一样简单地记录错误对象 抛出一个异常 将这个错误传递给另一个回调 要抛出异常,我们可以执行以下操作: const { readFile } = require("fs"); function

4.8K20

promise知识盲区整理

promise知识盲区整理 promise好处 promise简单的实现 promise封装fs文件操作----node.js环境下运行 promise封装ajax请求 node.js 中的promisify...>{ //出错,则抛出错误 if(err) throw err; //否则输出文件内容 console.log(data); }); //采用promise封装fs文件操作 const...p=new Promise((reslove,reject)=>{ fs.readFile('dhy.txt',(err,data)=>{ //出错,则抛出错误 if(err) reject...//也是抛出错误,直接执行最后的catch语句,接收异常 reject("凉凉"); }); }) .then(value=>{ throw "发生异常"; }) .then(value=>...:”+reason);这种打印错误语句,那么链式回调中的错误是不会有任何输出结果的 只有最开始的promise对象成功执行以后,才有下面的成功回调函数的链式调用执行,否则不会执行成功回调函数的链式调用

60910

JS】1170- 5 个使用 Promise 时的常见错误

Promise 提供了一种优雅的方法来处理 js 中的异步操作。这也是避免“回调地狱”的解决方案。然而,并没有多少开发人员了解其中的内容。因此,许多人在实践中往往会犯错误。...但是,Promise本身会在其作用域内捕捉所有的错误(甚至是打字错误),而不需要 try/catch。它确保在执行过程中抛出的所有异常都被获取并转换为被拒绝的 Promise。...假设我们想在Promise 中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。...这样,即使使用 catch() 或在 try/catch 内等待你的Promise,我们也不能立即处理这个错误。请看下面的例子。...); } })(); 4、在创建 Promise 后立即执行 Promise 至于下面的代码片断,如果我们把代码片断放在调用HTTP请求的地方,它就会被立即执行

93720

使用 Promise 时的5个常见错误,你占了几个!

Promise 提供了一种优雅的方法来处理 JS 中的异步操作。这也是避免“回调地狱”的解决方案。然而,并没有多少开发人员了解其中的内容。因此,许多人在实践中往往会犯错误。...在 Promise 中使用 try/catch 通常情况下,我们使用 try/catch 来处理错误。然而,不建议在 Promise 对象中使用try/catch 。...但是,Promise本身会在其作用域内捕捉所有的错误(甚至是打字错误),而不需要 try/catch。它确保在执行过程中抛出的所有异常都被获取并转换为被拒绝的 Promise。...假设我们想在Promise 中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。...这样,即使使用 catch() 或在 try/catch 内等待你的Promise,我们也不能立即处理这个错误。请看下面的例子。

58800

前端异常的捕获与处理

执行 JS 期间可能会发生的错误有很多类型。每种错误都有对应的错误类型,而当错误发生的时候就会抛出响应的错误对象。...try { // 可能会导致错误的代码 } catch (error) { // 在错误发生时怎么处理 } 如果 try 中的任何代码发生了错误,就会立即退出代码执行过程,然后执行 catch...(思考一下如果 catch 和 finally 抛出异常,catch 的异常是否能抛出) 但令人遗憾的是,try-catch 无法处理异步代码和一些其他场景。...五、异常捕获 5.1 window.onerror 当 JS 运行时错误发生时,window 会触发一个 ErrorEvent 接口的 error 事件,执行window.onerror()。...; Promise.reject("promise error"); new Promise((resolve, reject) => { reject("promise error"); });

3.3K30

从0到1实现Promise前言正文结束

,用相同的值执行 promise 如果 x 处于拒绝态,用相同的据因拒绝 promise x 为对象或函数 如果 x 为对象或者函数: 把 x.then 赋值给 then 如果取 x.then 的值时抛出错误...,则优先采用首次调用忽略剩下的调用 如果调用 then 方法抛出了异常 e: 如果 resolvePromise 或 rejectPromise 已经被调用,则忽略之 否则以 e 为据因拒绝 promise...由于我们对于同步代码的执行都是在try...catch中的,所以如果Promise发生了错误,如果没传onRejected,默认的函数会把错误reason抛出,然后会被promise2捕捉到,作为reject...总结来说,then()方法中不传onRejected回调,Promise内部会默认帮你写一个函数作为回调,作用就是throw抛出reject或者try...catch到的错误,然后错误reason会被promise2...实现Promise.race方法 Promise.race()接收一个包含多个Promise的数组,当有一个Promise为fulfilled状态时,整个大的Promise为onfulfilled,执行

93330

使用 Promise 时的5个常见错误,你占了几个!

Promise 提供了一种优雅的方法来处理 JS 中的异步操作。这也是避免“回调地狱”的解决方案。然而,并没有多少开发人员了解其中的内容。因此,许多人在实践中往往会犯错误。...在 Promise 中使用 try/catch 通常情况下,我们使用 try/catch 来处理错误。然而,不建议在 Promise 对象中使用try/catch 。...但是,Promise本身会在其作用域内捕捉所有的错误(甚至是打字错误),而不需要 try/catch。它确保在执行过程中抛出的所有异常都被获取并转换为被拒绝的 Promise。...假设我们想在Promise 中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。...这样,即使使用 catch() 或在 try/catch 内等待你的Promise,我们也不能立即处理这个错误。请看下面的例子。

61810

关于 JavaScript 错误处理的最完整指南(下半部)

, error, 和 throw 使用 Promise.reject 可以很方便的抛出错误Promise.reject(TypeError("Wrong type given, expected a...string")); 除了Promise.reject,我们也可以通过抛出异常来退出 Promise。...使用 Promise.allSettled 来处理错误 Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise带有一个对象数组...Node.js 中的异步错误处理:回调模式 对于异步代码,Node.js 主要使用这两种方式: 回调模式 event emitters 在回调模式中,异步 Node.js API 接受一个函数,该函数通过事件循环处理...在这一点上,我们可以: 简单的把对象错误打出来 抛出错误错误传到另一个回调 我们可以抛出一个异常 const { readFile } = require("fs"); function readDataset

2.2K20

从0到1实现Promise

,用相同的值执行 promise 如果 x 处于拒绝态,用相同的据因拒绝 promise x 为对象或函数 如果 x 为对象或者函数: 把 x.then 赋值给 then 如果取 x.then 的值时抛出错误...,则优先采用首次调用忽略剩下的调用 如果调用 then 方法抛出了异常 e: 如果 resolvePromise 或 rejectPromise 已经被调用,则忽略之 否则以 e 为据因拒绝 promise...由于我们对于同步代码的执行都是在try...catch中的,所以如果Promise发生了错误,如果没传onRejected,默认的函数会把错误reason抛出,然后会被promise2捕捉到,作为reject...总结来说,then()方法中不传onRejected回调,Promise内部会默认帮你写一个函数作为回调,作用就是throw抛出reject或者try...catch到的错误,然后错误reason会被promise2...实现Promise.race方法 Promise.race()接收一个包含多个Promise的数组,当有一个Promise为fulfilled状态时,整个大的Promise为onfulfilled,执行

85710

JavaScript 高级程序设计(第 4 版)- 期约和异步函数

(resolve, reject) => resolve()); let p2 = Promise.resolve(); Promise.reject() 实例化一个拒绝的期约抛出一个异步错误(...在期约的执行函数或处理程序中抛出错误会导致拒绝,对应的错误对象会成为拒绝的理由。...处理程序捕获,这不包括捕获执行函数中的错误,在解决或拒绝期约之前,仍然可以使用 try/catch 在执行函数中捕获错误。...关键字可以暂停异步函数代码的执行,等待期约解决 await关键字会暂停执行异步函数后面的代码,让出JS运行时的执行线程 await会尝试“解包”对象的值,然后将整个值传给表达式,再异步恢复异步函数的执行...()不会被异步函数捕获,而会抛出未捕获错误

1.3K100

现代JavaScript—ES6+中的Imports,Exports,Let,Const和Promise

在if外,number无法被访问,因此会出现引用错误。 但是,如果变量number在if外已经声明,将会出现下面的结果。...如上代码所示,我们在内重新声明了i,赋值20,该变量仅可在该中使用。 在外,当我们打印变量时,我们得到的是10而不是之前分配的值,这是因为外,内部变变量i是不存在的。...不是一个数字,那么我们调用带有错误信息的reject函数,否则我们调用resolve函数。...执行上述代码,输出如下: ? 调用reject函数会抛出一个错误,但是我们没有添加用于捕获错误的代码。 需要调用catch方法指定的回调函数来捕获并处理这个错误。...如何在JavaScript中延迟promise执行 很多时候,我们不希望立即创建promise,而是希望在某个操作完成后再创建。

3.2K10

ES6新特性

((reslove,reject)=>{ //resolve是对promise成功时候的回调 reject则是失败 return p; //返回Promise对象 }) }.../**reject的用法 以上是对promise的resolve用法进行了解释,相当于resolve是对promise成功时候的回调,它把promise的状态修改为 fullfiled,那么,reject...,里面一般装异步函数代码快, //随机数案例 满足条件则继续向下执行,失败则停止或执行失败专有的线路 //只有all里面的所有方法执行成功后,才会继续执行then参数中的resolve,一当里面一个方法错误...,那将会执行参数中的reject function promiseClick(){ let p = new Promise(function(resolve, reject){...给别人一个承诺 I promise you. // Promise 容器一旦创建,就开始执行里面的代码 var p1 = new Promise(function (resolve, reject

93310
领券