Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 我可以假设所有数据库都会返回承诺吗?_Postgresql_Mongodb_Unit Testing_Javascript - Fatal编程技术网

Postgresql 我可以假设所有数据库都会返回承诺吗?

Postgresql 我可以假设所有数据库都会返回承诺吗?,postgresql,mongodb,unit-testing,javascript,Postgresql,Mongodb,Unit Testing,Javascript,我正在和我的一个朋友设计一套单元和集成测试,我们对此表示怀疑。我们知道答案,至少,更可能是真的。然而,我们想听听你的想法 我们正在为MongoDB设计一个测试,我们希望在请求保存一个文档后能够得到一个承诺。到目前为止还不错 如果我们更改数据库呢???我们是否可以确定所有数据库在查询时都会返回承诺?? 我想关于_id,它取决于不同的数据库,出于测试原因,我们使用MongoDB的_id 我们在开玩笑地使用下面的测试 create://this method do exist

我正在和我的一个朋友设计一套单元和集成测试,我们对此表示怀疑。我们知道答案,至少,更可能是真的。然而,我们想听听你的想法

我们正在为MongoDB设计一个测试,我们希望在请求保存一个文档后能够得到一个承诺。到目前为止还不错

如果我们更改数据库呢???我们是否可以确定所有数据库在查询时都会返回承诺??

我想关于_id,它取决于不同的数据库,出于测试原因,我们使用MongoDB的_id

我们在开玩笑地使用下面的测试

            create://this method do exist on service, however, at the moment of testing, it is empty, just a placeholder
              jest.fn().mockImplementation((cat: CreateCatDto) =>
                Promise.resolve({ _id: 'a uuid', ...cat })
              )

我们的想法是设计不依赖于数据库的后端,但出于测试和开发的原因,我们正在使用MongoDB和PostgreSQL。

请记住,promise一词并不作为一个概念存在于所有数据库中,并且不可能为所有数据库的问题提供最终答案

也就是说,如果您所说的“承诺”是指插入新数据后的主键或标识,那么答案是否定的,即使在PostgreSQL上也不能保证您能够做到这一点。即使在PostgreSQL中,表也有可能在没有这些约束的情况下存在

否则,如果您所说的promise是指过程语言或函数语言中的概念,如(更新中的示例代码所示),那么是的,如果您的应用程序代码适当地使用异步调用,您应该始终收到promise对象

但不管异步调用是什么,不管它是直接的数据库(也不管是什么数据库系统)、API端点还是另一段应用程序代码。此外,在这种情况下,您的问题(或任何后续问题)将更适合您

我可以假设所有数据库都返回一个承诺吗

不是。大多数(如果不是所有的话)数据库连接协议都是同步的,这意味着客户端会阻塞,直到收到响应为止。甚至公开某种RESTful API的数据库也是同步的,因为HTTP


一些客户端驱动程序可能会通过返回JavaScrpt Promises或Java Futures之类的内容来包装此同步逻辑并显示异步行为,但这完全取决于您选择使用的驱动程序实现。

@jorgeguerapires不幸的是,此论坛比StackOverflow更具体,因为适当的主题非常关注数据库。虽然您的问题确实涉及数据库,在这里可能还可以,但它肯定更适合与一般编程相关的StackOverflow,并且您的问题更适合于JavaScript编程语言的特定功能(这里不太相关)。不管怎样,别担心,我很高兴能帮上忙。在将来,如果您不确定,将其发布到StackOverflow是一个好的开始,如果这里更适用,他们会将其移动到这里。谢谢,他们现在太生气了!!“如果您的应用程序代码适当地利用了异步调用,那么您应该始终收到一个promise对象”,这不一定是真的。尽管趋势越来越真实。Node.js中处理异步内容的旧式方法是使用
(err,data)
回调。仍然有一些API在这里和那里使用它。尽管如此,他们越来越多地承诺提供支持。而那些还没有(还)的很容易。甚至还有,“如果你所说的承诺是指主键或身份”——我从未听说过这种用法。你能为此链接一些来源吗?@Bergi很抱歉,这听起来很混乱,它是基于OP最初在DBA.StackExchange上写的问题。我认为他的问题现在更清楚了,我可能可以整理一下我的答案,并结合VLAZ的观点。如果你想避免依赖一个具体的接口,那么不要直接耦合到该接口。询问是否“所有数据库都将返回承诺”是没有意义的,数据库不会返回承诺。用JavaScript编写的数据库库可能会返回承诺,但承诺只是从函数返回非同步结果的多种方法之一。这取决于这些库的作者使用哪种方法(如果有的话)。