📜  在 JavaScript 中拒绝与抛出 Promise

📅  最后修改于: 2022-05-13 01:56:55.940000             🧑  作者: Mango

在 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


  • 输出:现在我们已经了解了rejectthrow的基本工作,让我们谈谈它们之间的区别:
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