返回空数组时通过 http 查询取回 id 的技术

Technique to get an id back with an http query when empty array is returned

首先让我说一下我有解决这个问题的方法,但我很想知道是否有更好的方法,以及我是否做错了什么。

我在 Web 应用程序的前端有一个 table 个对象,我需要为对象异步加载一些数据,因为它是每个对象都需要的。服务器 returns 一个包含该对象数据的 JSON 数组,数据包含对象的键,所以我可以在前端用它的数据更新对象。当没有数据时,我只会得到一个空数组,不幸的是,它无法更新对象,因为我没有用于更新它的密钥。这可能会导致稍后进行另一个查询,这是对 time/resources 的浪费。我无法修改服务器,有没有办法很好地做到这一点?

我目前的解决方案是在发送请求之前将对象的数据设置为一个空数组,如果结果不为空,则在收到结果时更新。

我想知道是否有 better/more 惯用的方法来做到这一点。

作为参考,我使用 Elm 和 PostgREST 作为后端。

您可以使用柯里化和偏函数应用来指示应更新哪个对象 ID。

我假设您有一些与此类似的代码:

type Msg
  = ...
  | FetchData Int
  | DataFetched [Data]
  | DataFetchFail Http.Error

-- inside the update function
update msg model =
  case msg of
    ...
    FetchData id =
      model ! [ Task.perform DataFetchFail DataFetched (Http.post ...) ]

如果您将 DataFetched 构造函数定义为将 ID 作为第一个参数,则可以使用部分应用程序来包含 ID 以供将来查找,而不管服务器是什么 returns。

下面是与此想法相同的代码块:

type Msg
  = ...
  | FetchData Int
  | DataFetched Int [Data]
  | DataFetchFail Http.Error

-- inside the update function
update msg model =
  case msg of
    ...
    FetchData id =
      model ! [ Task.perform DataFetchFail (DataFetched id) (Http.post ...) ]

您还可以将 ID 添加到失败消息中以获得更细粒度的错误消息。