在 JavaScript 中拒绝与抛出 Promise
本文介绍了 Javascript 中拒绝和抛出前提的使用,并解释了它们的区别。
reject():它是 Javascript 中的一个内置函数,它返回一个因特定给定原因而被拒绝的 Promise 对象。
句法:
Promise.reject(reason)
示例:原因可以是简单的字符串消息,或者您甚至可以传递一个错误对象。
- 程序 1:传递一个字符串消息作为原因。
javascript
javascript
javascript
javascript
javascript
javascript
javascript
javascript
javascript
javascript
- 输出:
promise failed!
- 程序 2:将instanceOf Error作为reason传递。
javascript
- 输出:正如你所见,当我们传递一个Error对象时,我们得到了整个Error 树。因此,用户更喜欢哪一个取决于用户。
Error: promise failed!
at :4:9
at new Promise ()
at :2:11
at render (tryit.php:202)
at tryit.php:170
at dispatch (jquery.js:4435)
at r.handle (jquery.js:4121)
throw:在 JavaScript 中用于创建和抛出用户定义的异常。使用JavaScript throw语句,您可以完全控制程序流程并生成用户定义的错误消息。如果我们在上面两个示例中使用throw而不是reject() ,结果将完全相同(您可以自己尝试,只需将reject替换为throw )。
示例:但是throw可以在任何 Javascript try-catch 块中使用,而不仅仅是 Promise。
- 程序 1:在 promise 中使用 throw。
javascript
- 输出:
promise failed!
- 程序 2:在没有承诺的情况下使用 throw。
javascript
- 输出:现在我们已经了解了reject和throw的基本工作,让我们谈谈它们之间的区别:
Less than 25
Promise-reject 和 throw 的比较:
1.如果Promise 中有异步回调函数,那么我们不能在回调函数中使用 throw,因为catch() 将无法识别它,并且我们将在输出中得到错误。
- 方案一:
javascript
- 输出:如您所见,错误消息(“promise failed!”)已打印在输出中,但不是由我们的 promise 的catch()函数打印的。它成为一个未捕获的异常。
/home/akarshan/Desktop/Projects/Personal/gfg/app.js:3
throw( 'promise failed!' );
^
promise failed!
(Use `node --trace-uncaught ...` to show where the exception was thrown)
- 方案2:为了解决上述情况,我们可以使用reject()方法。
javascript
- 输出:在这里, catch块能够识别reject()并打印相应的消息。
promise failed!
2.这是一个非常基本的区别。如果在函数内的任何地方遇到throw ,则立即抛出异常并终止控制流。换句话说,在抛出异常后,控制来自抛出异常的函数。
- 方案一:
javascript
- 输出:从这个例子中可以清楚地看到, console.log(“Here”)语句没有被执行。
'promise failed!'
- 程序2:为了解决上述情况,我们使用reject()而不是throw语句,函数内部的reject语句将在控制进入catch块之前执行。
javascript
- 输出:
Here
promise failed!
3. reject只能与 Javascript promise 一起使用,但throw与 reject 不同,可用于在任何 try-catch 块中创建和抛出用户定义的异常,而不仅仅是带有 promise 的异常。如果您在与 Promise 无关的 try-catch 块中使用Promise.reject() ,则会弹出UnhandledPromiseRejectionWarning错误。
- 方案一:
javascript
- 输出:这里出现UnhandledPromiseRejectionWarning错误,因为Promise.reject()找不到与 Promise 对象关联的 catch 块。
Okay!
- 程序 2:上述代码中的 catch 块没有与任何 Promise 对象相关联,因此它没有被执行。这从输出中可以清楚地看出,因为“inside catch”消息没有被打印出来。但是如果我们使用 throw 就不会出现这个错误。
javascript
- 输出:
inside catch
Less than 25