返回空数组时使用http查询获取id的技术

时间:2016-07-28 18:37:07

标签: http elm postgrest

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

我在webapp的前端有一个对象表,我需要异步加载对象的一些数据,因为它是基于每个对象的需要。服务器返回包含该对象数据的JSON数组,并且数据包含对象的键,因此我可以使用其数据更新前端的对象。当没有数据时,我只得到一个空数组,遗憾的是它无法更新对象,因为我没有用它来更新它的密钥。这可能导致稍后的另一个查询,这是浪费时间/资源。我无法修改服务器,有没有办法很好地做到这一点?

我目前的解决方案是在发送请求之前将对象的数据设置为空数组,然后在结果为非空时接收结果时更新。

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用currying和partial function application来指示应更新哪个对象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以供将来查找。

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

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添加到“失败”消息中,以获取更细粒度的错误消息。