【问题标题】:Making multiple request to different databases fail or succeed向不同数据库发出多个请求失败或成功
【发布时间】:2019-03-09 02:40:56
【问题描述】:

我正在开发一个节点 js graphql api,我需要向多个数据库发出多个请求,其中任何请求都可能失败。 我曾尝试一次发出两个请求并等待两个请求,但是任何请求都可能失败或成功,同样,如果我应该按顺序发出请求,如果第一个应该成功而第二个失败怎么办? 我可以采取什么方法使两个请求都失败或成功?

// wait for request to finish const [user, recResponse] = await Promise.all([dbRequest, recRequest]);

【问题讨论】:

  • 这不是一个用户互相提供功能的网站,而是一个我们互相帮助理解和改进我们正在开发的代码的网站。如果您能提供一些到目前为止您已经尝试过的示例,那将会很有帮助。您可能会发现此链接也很有用:How do I ask a good question? 也就是说:您是否尝试过 async requests 或 Promises?
  • 是的,我正在等待异步等待和 Promise.all 的两个请求,这不是问题,问题是两个数据库中的数据变得不同步。两个请求都将写入数据库,其中任何一个都可能失败或成功。如果第一个失败,第二个可能会成功,我们会将数据写入其中一个而不是另一个,反之亦然。顺便谢谢。
  • 你的代码是扮演graphQL服务器还是graphQL客户端的角色?

标签: javascript node.js api request graphql


【解决方案1】:

使用Promise.all。如果一个承诺失败,一切都会失败。顺序无关紧要。

【讨论】:

  • 这正是正在使用的,但我在想的是,任何请求都可能对数据库进行了更改,而另一个请求可能因任何原因而失败,从而导致事情不同步(我可能是错的),请解释!
  • 实际上不需要Promise.allconst [user, recResponse] = [await dbRequest, await recRequest]; 将被分配或两者都未定义(如果其中一个请求失败)
【解决方案2】:

使用事务 - 当任何人失败时都回滚/全部。

【讨论】:

    猜你喜欢
    • 2016-12-26
    • 2022-12-02
    • 2019-09-15
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多