2016-07-28 185 views
0

让我先说我有这个问题的解决方案,但我很想知道是否有更好的方法,以及我是否在做有问题。返回空数组时返回一个http查询的技术

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

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

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

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

回答

2

您可以使用咖喱和部分功能应用程序来指示应该更新哪个对象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添加到失败消息的更细粒度的错误消息。

+0

好的电话,应该想到了!我会更新并接受。 – jgon