将多个 Falcor 数据源组合成单个模型

Posted

技术标签:

【中文标题】将多个 Falcor 数据源组合成单个模型【英文标题】:Combining Multiple Falcor Data Sources into Single Model 【发布时间】:2018-08-28 22:20:55 【问题描述】:

修改问题以便更好地解释:

我有两个来自两个不同 HttpDataSource 的 Falcor 模型,如下所示:

第一个模型(用户模型):

const user_model = new falcor.Model(

  source: new HttpDataSource('http://localhost:3000/api/userManagement')
);
user_model.get(['user', 'list'])

输出1:


    "jsonGraph": 
        "user": 
            "list": 
                "$type": "atom",
                "value": 
                    "users": [...]
                
            
        
    

第二个模型(角色模型):

const role_model = new falcor.Model(

  source: new HttpDataSource('http://localhost:3000/api/roleManagement')
);

role_model.get(['role', 'list'])

输出2:


    "jsonGraph": 
        "role": 
            "list": 
                "$type": "atom",
                "value": 
                    "roles": [...]
                
            
        
    

有没有办法将所有这些 Falcor 模型组合成一个模型?

目的是,如果我尝试执行 user_model.get(['user', 'list']) 不止一次,它会从 Falcor-Model-Cache 获取数据(在第一次从 DB 获取之后)。

但如果我尝试执行 role_model.get(['user', 'list']),那么我必须再次访问数据库以获取数据(以便将相同的用户列表存储在 role_model 缓存中)。

所以如果有如下方法:

all_model = user_model + role_model

然后我可以做 all_model.get(['user', 'list']) (或) all_model.get(['role', 'list'])。所以基本上我在浏览器端只有一个 Falcor-Model-Cache 组合。

希望现在问题更清楚了。

【问题讨论】:

每个源的 graphJSON 是什么样的?您是想跨每个合并 keySet(可能更难),还是它们彼此脱节(可能更容易)? 【参考方案1】:

你必须使用 forkJoin

forkJoin(model1.source,model2.source).subscribe(res=>
    //in res[0] you have the response of model1.source
    //in res[1] you have the response of model2.source
    let data=...res[0],...res[1]
    //in data you have all the properties

【讨论】:

我相信你所说的只是结合所有 falcor 模型调用的结果(即)只是数据。但是组合的 Falcor 数据源应该用于后续的数据调用,如果数据已经存在于 Falcor 模型缓存中,则将从那里而不是从 Api 调用提供数据。

以上是关于将多个 Falcor 数据源组合成单个模型的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 将多个 SQL 列组合成 HTML 表的单个列

将多个元素数组组合成单个 jQuery 选择器

遍历将多个映射操作组合成单个 ADT

将多个分组查询组合成单个查询

将多个 RewriteRule 指令组合成 .htaccess 中的单个规则

将 scala 数据框列组合成单个案例类