返回顶部
首页 > 资讯 > 精选 >JS使用Promise时常见的错误有哪些
  • 415
分享到

JS使用Promise时常见的错误有哪些

2023-07-04 14:07:21 415人浏览 独家记忆
摘要

本文小编为大家详细介绍“js使用Promise时常见的错误有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS使用Promise时常见的错误有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Promise

本文小编为大家详细介绍“js使用Promise时常见的错误有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS使用Promise时常见的错误有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Promise 提供了一种优雅的方法来处理 JS 中的异步操作。这也是避免“回调地狱”的解决方案。然而,并没有多少开发人员了解其中的内容。因此,许多人在实践中往往会犯错误。

1.避免 Promise 地狱

通常,Promise是用来避免回调地狱。但滥用它们也会导致 Promise是地狱。

userLogin('user').then(function(user){    getArticle(user).then(function(articles){        showArticle(articles).then(function(){            //Your code Goes here...        });    });});

在上面的例子中,我们对 userLogingetararticle 和 showararticle 嵌套了三个promise。这样复杂性将按代码行比例增长,它可能变得不可读。

为了避免这种情况,我们需要解除代码的嵌套,从第一个 then 中返回 getArticle,然后在第二个 then 中处理它。

userLogin('user')  .then(getArticle)  .then(showArticle)  .then(function(){       //Your code goes here...});

2.在 Promise 中使用 try/catch 块

通常情况下,我们使用 try/catch 块来处理错误。然而,不建议在 Promise 对象中使用try/catch 。

这是因为如果有任何错误,Promise对象会在 catch 内自动处理。

ew Promise((resolve, reject) => {  try {    const data = doThis();    // do something    resolve();  } catch (e) {    reject(e);  }})  .then(data => console.log(data))  .catch(error => console.log(error));

在上面的例子中,我们在Promise 内使用了 try/catch 块。

但是,Promise本身会在其作用域内捕捉所有的错误(甚至是打字错误),而不需要 try/catch块。它确保在执行过程中抛出的所有异常都被获取并转换为被拒绝的 Promise。

new Promise((resolve, reject) => {  const data = doThis();  // do something  resolve()})  .then(data => console.log(data))  .catch(error => console.log(error));

注意:在 Promise 块中使用 .catch() 块是至关重要的。否则,你的测试案例可能会失败,而且应用程序在生产阶段可能会崩溃。

3.在 Promise 块内使用异步函数

Async/Await 是一种更高级的语法,用于处理同步代码中的多个Promise。当我们在一个函数声明前使用 async 关键字时,它会返回一个 Promise,我们可以使用 await 关键字来停止代码,直到我们正在等待的Promise解决或拒绝。

但是,当你把一个 Async 函数放在一个 Promise 块里面时,会有一些副作用。

假设我们想在Promise 块中做一个异步操作,所以使用了 async 关键字,但,不巧的是我们的代码抛出了一个错误。

这样,即使使用 catch() 块或在 try/catch 块内等待你的Promise,我们也不能立即处理这个错误。请看下面的例子。

// 此代码无法处理错误new Promise(async () => {  throw new Error('message');}).catch(e => console.log(e.message));(async () => {  try {    await new Promise(async () => {      throw new Error('message');    });  } catch (e) {    console.log(e.message);  }})();

当我在Promise块内遇到 async 函数时,我试图将 async 逻辑保持在 Promise 块之外,以保持其同步性。10次中有9次都能成功。

然而,在某些情况下,可能需要一个 async 函数。在这种情况下,也别无选择,只能用try/catch 块来手动管理。

new Promise(async (resolve, reject) => {  try {    throw new Error('message');  } catch (error) {    reject(error);  }}).catch(e => console.log(e.message));//using async/await(async () => {  try {    await new Promise(async (resolve, reject) => {      try {        throw new Error('message');      } catch (error) {        reject(error);      }    });  } catch (e) {    console.log(e.message);  }})();

4.在创建 Promise 后立即执行 Promise 块

至于下面的代码片断,如果我们把代码片断放在调用Http请求的地方,它就会被立即执行。

const myPromise = new Promise(resolve => {  // code to make HTTP request  resolve(result);});

原因是这段代码被包裹在一个Promise构造函数中。然而,有些人可能会认为只有在执行myPromise 的then方法之后才被触发。

然而,真相并非如此。相反,当一个Promise被创建时,回调被立即执行。

这意味着在建立 myPromise 之后到达下面一行时,HTTP请求很可能已经在运行,或者至少处于调度状态。

Promises 总是急于执行过程。

但是,如果希望以后再执行 Promises,应该怎么做?如果现在不想发出HTTP请求怎么办?是否有什么神奇的机制内置于 Promises 中,使我们能够做到这一点?

答案就是使用函数。函数是一种耗时的机制。只有当开发者明确地用 () 来调用它们时,它们才会执行。简单地定义一个函数还不能让我们得到什么。所以,让 Promise 变得懒惰的最有效方法是将其包裹在一个函数中!

const createMyPromise = () => new Promise(resolve => {  // HTTP request  resolve(result);});

对于HTTP请求,Promise 构造函数和回调函数只有在函数被执行时才会被调用。所以现在我们有一个懒惰的Promise,只有在我们需要的时候才会执行。

5.不一定使用 Promise.all() 方法

如果你已经工作多年,应该已经知道我在说什么了。如果有许多彼此不相关的 Promise,我们可以同时处理它们。

Promise 是并发的,但如你一个一个地等待它们,会太费时间,Promise.all()可以节省很多时间。

记住,Promise.all() 是我们的朋友

const { promisify } = require('util');const sleep = promisify(setTimeout);async function f1() {  await sleep(1000);}async function f2() {  await sleep(2000);}async function f3() {  await sleep(3000);}(async () => {  console.time('sequential');  await f1();  await f2();  await f3();  console.timeEnd('sequential');  })();

上述代码的执行时间约为 6 秒。但如果我们用 Promise.all() 代替它,将减少执行时间。

(async () => {    console.time('concurrent');    await Promise.all([f1(), f2(), f3()]);    console.timeEnd('concurrent');   })();

读到这里,这篇“JS使用Promise时常见的错误有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: JS使用Promise时常见的错误有哪些

本文链接: https://lsjlt.com/news/345629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS使用Promise时常见的错误有哪些
    本文小编为大家详细介绍“JS使用Promise时常见的错误有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS使用Promise时常见的错误有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Promise...
    99+
    2023-07-04
  • 用promise的常见错误有哪些
    这篇文章主要为大家展示了“用promise的常见错误有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“用promise的常见错误有哪些”这篇文章吧。Promi...
    99+
    2024-04-02
  • JS使用Promise时常见的5个错误总结
    目录1.避免 Promise 地狱2.在 Promise 中使用 try/catch 块3.在 Promise 块内使用异步函数4.在创建 Promise 后立即...
    99+
    2022-11-13
    JS Promise 错误 JS Promise Promise 错误
  • Js中的常见错误类型有哪些
    本篇内容主要讲解“Js中的常见错误类型有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Js中的常见错误类型有哪些”吧!JavaScript中的错误类型ErrorEvalErrorRangeE...
    99+
    2023-06-29
  • Vue开发时常见的错误有哪些
    今天小编给大家分享一下Vue开发时常见的错误有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。安装超时(install t...
    99+
    2023-07-05
  • C# foreach使用中常见的错误有哪些
    这篇文章主要讲解了“C# foreach使用中常见的错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# foreach使用中常见的错误有哪些”吧!在做项目时经常会碰到用C# for...
    99+
    2023-06-17
  • SQL的常见错误有哪些
    本篇内容主要讲解“SQL的常见错误有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL的常见错误有哪些”吧!1. Queries语句的执行顺序SQL的入门...
    99+
    2024-04-02
  • nodejs常见的错误有哪些
    小编给大家分享一下nodejs常见的错误有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!node的十大常见错误:1、阻塞事件...
    99+
    2024-04-02
  • 常见的AngularJS错误有哪些
    这篇文章主要为大家展示了“常见的AngularJS错误有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“常见的AngularJS错误有哪些”这篇文章吧。1.在...
    99+
    2024-04-02
  • tomcat常见的错误有哪些
    常见的Tomcat错误包括:1. 404 Not Found:请求的资源未找到。2. 500 Internal Server Err...
    99+
    2023-09-22
    tomcat
  • MySQL常见错误有哪些
    小编给大家分享一下MySQL常见错误有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、Can’t connect to M...
    99+
    2024-04-02
  • 常见CSS错误有哪些
    这篇文章将为大家详细讲解有关常见CSS错误有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下:区别IE6与FF: background:orange;*background:blue; 区别IE...
    99+
    2023-06-08
  • golang常见错误有哪些
    golang常见错误有:1、空指针引用错误;2、切片越界错误;3、并发竞争;4、垃圾回收性能问题;5、死锁;6、异常处理不当。本教程操作环境:windows10系统、golang1.20.1版本、DELL G3电脑。Golang是一种在近年...
    99+
    2023-07-10
  • 用python编写程序时有哪些常见的错误
    本篇内容主要讲解“用python编写程序时有哪些常见的错误”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用python编写程序时有哪些常见的错误”吧!说明语法错误,也就是说,程序员在编写语句或表...
    99+
    2023-06-20
  • 常见HTML5的错误用法有哪些
    这篇文章主要介绍了常见HTML5的错误用法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、使用section作为div的替代品人们在...
    99+
    2024-04-02
  • SQL的常见错误用法有哪些
    今天小编给大家分享一下SQL的常见错误用法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、LIMIT 语句分页查询是...
    99+
    2023-06-28
  • JavaScript的Promise常见问题有哪些
    这篇“JavaScript的Promise常见问题有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2024-04-02
  • java中使用for循环时常见的语法错误有哪些
    错误程序如下:public class Forloop { public static void main(String[] args) { for (int i = 1; i ...
    99+
    2016-04-23
    java入门 java for 语法错误
  • SQL中有哪些常见的错误
    这篇文章给大家介绍SQL中有哪些常见的错误,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如...
    99+
    2024-04-02
  • JavaScript中常见的错误有哪些
    这篇文章主要讲解了“JavaScript中常见的错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中常见的错误有哪些”吧!Java...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作