嵌套承诺是一种好的做法吗?



应用程序的简短描述以及我遇到问题的原因

我正在制作一个带有express/Apollo API服务器的网站。我想隔离 Apollo 服务器的用例和解析器。

因此,我创建了三个类,一个类在实体文件夹中名为 createTender,第二个类,处理程序,它格式化数据,以便 createTender 只获取它需要的数据。第三类是dataBaseGatway,它是应用程序和数据库的中间人。

类的基本图

我没有在图表中包含数据库或猫鼬模块。

这是问题的场景

在一个实例中,我需要在数据库中创建一个表,并且我需要等待将创建该表的函数。但是我从解析器(处理 API 请求的地方(调用的函数调用另一个处理表创建的函数,然后将其保存到 MongoDB 并检查错误。此函数是异步/等待,它等待新表被保存。

这是问题

嵌套承诺是一种好的做法吗?

创造有希望的承诺有什么问题吗?

那么承诺中的承诺呢?

嵌套承诺是javascript中红蓝函数拆分的不幸副作用。也就是说,一旦你开始添加异步函数,你几乎就陷入了这种范式。定义它的良好实践还是不良实践是你如何组织代码以使其易于推理。可能使承诺令人困惑的核心因素是没有正确记录返回值,并且没有明确阻止诸如Promise.all之类的承诺解析。

从广义上讲,我认为 async-await 是一种更好的模式,它可以做同样的事情,并且更容易推理代码,但有时承诺更直接有用。

同样重要的是:有了一连串的承诺,你应该考虑.finally在事情发展的情况下清理逻辑。

最新更新