今天,我想快速概述一个新库,该库可以帮助您管理应用程序流程。
该用例的灵感来自于我最近遇到的两个特殊问题。
在问题一中,我有一个React App,它可以立即并定期进行身份验证。 在每次认证期间,检索数据的请求都需要等待。 在此期间,我不想接收或显示未经身份验证的响应错误。
在第二个问题中,我有一个数据库微服务,该服务立即调用发送查询的函数,但是它需要在实际发送任何查询之前完成与数据库的连接。
这个问题似乎有些普遍。 那就是promise-funnel
进来的地方! 您可以在NPM上签出。
概念
Promise-funnel是一个很小的文件库(4kb),它是一个非常简单的库。 它导出三个功能。
换行:任何要传递的函数都必须换行 。
软木塞:要暂停执行功能,您可以软木漏斗。 所有函数执行都将收集起来,以便以后运行。
开瓶:要再次开始执行,并执行在塞住漏斗时应运行的每个功能,可以开瓶。
当结合这些简单的概念时,我们能够为我们的应用程序创建强大的控制流!
如何使用它
这是将其与需要在发送任何查询之前进行连接的数据库应用程序一起使用的方式。
您可以看到查询被立即关闭,并且仅在数据库连接成功时才取消。 这意味着该服务可以立即接受请求,但是在数据库连接发生之前它不会执行任何查询!
现在让我们看一下我前面提到的身份验证示例。
用户每五分钟重新登录一次。 登录时,每个用户请求都会失败。 因此,我们没有取而代之,而是对提取请求进行了处理,直到登录完成。 现在,用户将不会通过身份验证停止。。尽管它们可能会延迟!
如果您想知道, createFunnel
都会创建一个新的漏斗实例。 这意味着您可以安全地分别进行不同的操作。
使用自己的承诺
并非每个环境都有本地的Promises。 如果您想将Bluebird之类的库与promise-funnel
,可以!
承诺部分
到目前为止,我们还没有真正看到此库如何使用Promise。 当函数被包装并且漏斗被塞住时,该函数将不会立即执行。 而是返回一个Promise
。 仅在未打开漏斗时,它才会解决或拒绝。
上面的代码片段应显示,将程序开瓶将可以解决包装函数返回的承诺。
这意味着在包装函数未打开之前,在包装函数上使用await
或在包装函数上使用.then().catch()
的任何函数都不会继续。
你有它! promise-funnel
是一个很小的库,但我希望大家都能发现它有用。
要安装它,可以使用以下命令:
npm install promise-funnel --save
您也可以在此处查看源代码: https : //github.com/JustinDFuller/promise-funne l
反馈
这是一个全新的库,显然仍然可以改进。 有什么建议吗? 例如,也许可以通过选择性地仅取消一定数量的并发来避免大型突发事件而受益。 也可能有其他方式来完成应许程序应该做的事情。 随时在评论中分享建议和替代工具!
嗨,我是Justin Fuller。 我很高兴您阅读我的帖子! 我需要让您知道,我在这里写的所有内容都是我个人的观点,并不以任何方式代表我的雇主。 所有代码示例都是我自己的,并且与美国银行的代码完全无关。
我也希望收到您的来信 ,请随时在LinkedIn , Github或Medium上与我联系。 再次感谢您的阅读!
From: https://hackernoon.com/introducing-promise-funnel-93e7d46ceb31