有关使用相互依赖的承诺的深入指南

如何为级联的承诺编写干净的代码
Luis Perdigao在《 Unsplash》上的照片

作为开发人员,我一直在寻找编写更简洁代码的方法。

一年前,我发布了一个名为Premiere的库,该库旨在促进Javascript前端使用Restful API。 我现在正在构建库的v2,在此过程中,我注意到有地方可以使代码更整洁,尤其是在Promises方面。

在本文中,我不会解释Promises的基础知识,但是如果您正在寻找它,请查看Dave Atchley的文章 ,他在这方面做得很好。

免责声明:寻找异步/等待示例? 跳到最后,然后单击存储库链接。

尽管Promises并不是HTTP请求的排他性,但这通常是它们的用途,因此这将是本文示例的主题。

让我们开始吧:

这是一段简单明了的代码,可以很好地完成工作。 但是,如果我们采用相同的功能并添加更多功能(例如缓存),则它可能会变得复杂起来。 这是一个例子:

如您所见,此示例不像前一个示例那么干净。 fetchAndCacheUser做太多事情了。 当然,这不是世界末日,但理想情况下,每个功能都应该做一件事,因此更容易测试和重用它。

如果我们添加另一级缓存,此问题将变得更加明显。 因此,让我们添加Promise缓存(以防止发出两个相同的请求)并查看其外观:

我们距离“只做一件事情”更远。 我们在此代码中添加的内容越多,它所得到的信息就越混乱,并且难以重用。 例如,如果我们决定创建fetchAndCacheItem ,则将需要我们复制所有这些代码。

分解

分解这一步骤的第一步是将事物分解为更多的功能,每个功能都照顾一个关注点。 我们要做的是创建三个函数,每个函数负责做以下三件事之一:

  1. 缓存承诺
  2. 缓存结果
  3. 获取数据

这里的主要挑战是将一个部件连接到另一个部件,因为并非所有部件都需要每次都执行(例如,在缓存时)。 为此,我们将提供对缓存函数的回调,以便在不存在缓存时调用它们。

这是代码:( 为清楚起见,隐藏了缓存方法)

好多了吧? 我们确实有更多的代码行,但是阅读维护很容易。 回到fetchAndCacheItem提及,将我们的关注点分开,我们可以开始看到重用相同功能的路径。

下一步

我们已经达到令人满意的程度,但是如果我告诉您我们可以做得更好呢?

看一下我们的最后一个函数fetchAndCacheUser ,我们可以看到以相反的执行顺序声明了这些函数,这可能会造成混乱。 我们还必须声明一个新变量,并为每个步骤分配一个函数,使代码混乱。

为了解决这些问题,我创建了promise-cascade库。 这是带有promise-cascadefetchAndCacheUser`函数的外观:

如您所见,代码现在以自然顺序编写,并且没有const ... = () => ...混乱。

在某些情况下,大量使用这些功能会有所帮助,扩展PromiseCascade并创建辅助方法,因此可以代替cascade.push(something.bind(this), value1, value2) PromiseCascade cascade.push(something.bind(this), value1, value2)来调用cascade.something(value1, value2) 您可以在GitHub存储库中查看此示例。

有关更多详细信息和示例(包括async ),请在GitHub上查看。 如果您喜欢它,我感谢您给它加????星。

❤️喜欢。 分享。 发表您的评论。

不要忘记传播爱。 随心所欲,与您的朋友和同事分享。 也非常欢迎您在下面留下您的评论。

您可以随时关注我在twitter.com/pedsmoreira上创建的内容或注册我的时事通讯:

如何为级联的承诺编写干净的代码
别担心,没有垃圾邮件❤

额外

如果您喜欢用爱制作的软件,我想邀请您加入GitShowcase 快来获得自己的摇滚明星作品集????。 抄送 Victor F.Santos

From: https://hackernoon.com/how-to-write-clean-code-for-cascaded-promises-809de5b950fd

相关文章:

  • 2021-12-04
  • 2021-12-03
  • 2021-12-03
  • 2021-06-03
  • 2022-12-23
  • 2021-09-08
  • 2021-05-18
  • 2021-06-28
猜你喜欢
  • 2021-09-22
  • 2022-12-23
  • 2021-09-25
  • 2021-07-26
  • 2021-07-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案