Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
如何在NGXS中获得异步操作的结果?_Ngxs - Fatal编程技术网

如何在NGXS中获得异步操作的结果?

如何在NGXS中获得异步操作的结果?,ngxs,Ngxs,我想根据异步NGXS操作的结果执行一个操作 在Angular前端应用程序中,我使用NGXS进行状态管理。有些操作涉及通过REST调用与后端对话。这些操作被实现为,我的代码中的reducer函数返回一个可观察的 我正在寻找的是一种方法,可以获得后端调用的结果,以便能够执行一些操作 我正在尝试实现的一个用例是导航到刚刚创建的对象:业务对象是在前端(Angular)应用程序中创建的,带有几个域属性。它们会在后端持久化,因此会创建此对象的ID并返回到前端,并合并到NGXS存储中。作为对此的直接响应,我想

我想根据异步NGXS操作的结果执行一个操作

在Angular前端应用程序中,我使用NGXS进行状态管理。有些操作涉及通过REST调用与后端对话。这些操作被实现为,我的代码中的reducer函数返回一个可观察的

我正在寻找的是一种方法,可以获得后端调用的结果,以便能够执行一些操作

我正在尝试实现的一个用例是导航到刚刚创建的对象:业务对象是在前端(Angular)应用程序中创建的,带有几个域属性。它们会在后端持久化,因此会创建此对象的ID并返回到前端,并合并到NGXS存储中。作为对此的直接响应,我想导航到新对象的详细视图。要做到这一点,我需要

  • (a) 已成功返回呼叫的信息,以及
  • (b) 来自后端的答案(本例中为ID)
另一个稍微复杂一点的用例是向业务对象分配多个标记。标记本身就是实体,每个标记都有一个ID。在UI中,用户可以选择现有标记或添加新标记。无论哪种方式,都可以在UI的一个步骤中添加多个标记,这意味着我必须

  • 为每个新标记调用后端以创建ID
  • 创建所有缺失的标记后,使用标记ID列表更新业务对象
  • 一般来说,前端中的一些用例取决于后端调用的结果,并且没有干净的方法在存储中找到这个结果(尽管它在那里)

    我知道我可以订阅从商店的dispatch方法返回的Observable(如中所示)。
    我也知道。在这两种情况下,我都可以将代码附加到操作完成的事件,但这两个选项都不允许我获得后端调用的结果。在第一种情况下,Observable承载了整个存储,而在后一种情况下,我得到了原始操作,不幸的是它缺少了基本信息(ID)。

    Dude,你必须仔细阅读文档。简而言之,答案是
    分派返回的可观察状态具有void类型,这是因为可以有多个状态侦听同一@Action,因此实际上不可能从这些操作返回状态,因为我们不知道它们的形式。
    。为什么你需要一个行动的结果?您可以创建一个服务,在这里您可以返回一个可观察的和订阅的to@overthesanity“你可以创建一个服务,在那里你可以返回一个可观察的并订阅”-我看不出这对我有什么帮助。事实上,我已经在它自己的服务中实现了后端通信,方法返回正确的可观察值。但只要我使用异步操作来触发对该服务的调用,我就无法获得这些调用。至于dispatch method结果,我已经用ngxs 3.5.1检查了结果,它确实保存了整个存储,而不是void…>
    它确实保存了整个存储,而不是void
    -您不应该依赖于此。它不是接口的显式部分,将在v4中更改。您应该将其视为返回
    void
    ,但只要我使用异步操作来触发对该服务的调用
    -为什么需要操作来触发对该服务的调用?你不能直接做什么?>你不能直接做什么?也许这就是重点。我从docs()中获取了整个异步操作,到目前为止它是有意义的(将整个用户操作包装成一个ngxs操作),但在这种特殊情况下,以另一种方式进行可能是有意义的。如果我在启动某个操作之前进行了整个后端通信,那么我就已经准备好了所有的东西