Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Parse platform FetchAlliFeeded与JSSDK中的fetchAll到底有什么不同?_Parse Platform - Fatal编程技术网

Parse platform FetchAlliFeeded与JSSDK中的fetchAll到底有什么不同?

Parse platform FetchAlliFeeded与JSSDK中的fetchAll到底有什么不同?,parse-platform,Parse Platform,我从来没有完全理解过描述中必要的部分 .fetchAll() 获取给定的Parse.Object列表 .fetchallifneed() 获取给定的Parse.Object列表(如果需要) 在什么情况下,我可能会使用它,什么确切地决定了需要?我觉得这是一个非常基本的概念,但是我还没有找到一个令人满意的清晰的定义 在API中的示例中,我注意到fetchallifneed()具有: // Objects were fetched and updated. 在成功模式中,fetchAll只有: //

我从来没有完全理解过描述中必要的部分

.fetchAll()
获取给定的Parse.Object列表

.fetchallifneed()
获取给定的Parse.Object列表(如果需要)

在什么情况下,我可能会使用它,什么确切地决定了需要?我觉得这是一个非常基本的概念,但是我还没有找到一个令人满意的清晰的定义

在API中的示例中,我注意到
fetchallifneed()
具有:

// Objects were fetched and updated.
在成功模式中,
fetchAll
只有:

// All the objects were fetched.
那么
fetchallifneed()
是否也可以保存内容?这里很混乱

更新

测试1

根据@danh在评论中留下的一些提示,我尝试了以下方法

var todos = [];
var x = new Todo({content:'Test A'});  // Parse.Object
todos.push(x);
x.save();

// So now we have a todo saved to parse and x has an id. Async assumed.

x.set({content:'Test B'});

Parse.Object.fetchAllIfNeeded(todos);
因此在这个场景中,我的客户机
x
与服务器不同。但是
x.hasChanged()
为false,因为我们使用了
set
函数,并且触发了更改事件
fetchallifneed
不返回任何结果。因此,这并不是说它试图直接将其与服务器上的同步和获取内容进行比较

我注意到,在请求负载中,运行
fetchallifneed
发送以下有趣的内容

{where: {objectId: {$in: []}}, _method: "GET",…}
因此,似乎在客户端,某种东西决定了是否需要一个对象

测试2

现在,根据注释,我尝试通过设置为silent来操纵对象的
changed
状态

x.set({content:'Test C'}, {silent:true});
x.hasChanged(); // true
Parse.Object.fetchAllIfNeeded(todos);
还是没什么有趣的。显然,服务器状态(“测试A”)不同于客户端(“测试C”)。我仍然得到
[]
结果,请求负载为:

{where: {objectId: {$in: []}}, _method: "GET",…}
更新2


通过查看解析源代码,我们找到了答案。查看答案。

经过多次操作,然后查看源代码-我发现了这一点。基本上,
fetchallifneedd
将获取数组中没有数据的模型,这意味着没有属性属性和值

因此,用例将是您拥有一个父对象,该父对象具有嵌套的解析对象数组。获取父对象时,数组中嵌套的子对象将不包括在内(除非设置了
include
query约束)。相反,指针被发送回客户端,在您的客户机中,这些指针被转换成没有数据的“空”模型,基本上只有带ID的空Parse.Objects

具体地说,Parse.Object有一个名为
\u hasData
的内部布尔属性,它似乎在任何时候都被切换为true,比如set、fetch或任何赋予该模型属性的东西

因此,假设您需要获取这些子对象。你可以这样做

var childObjects = parent.get('children'); // Array
Parse.Object.fetchAllIfNeeded(childObjects);
它将搜索那些当前仅表示为id为的空对象的子对象

fetchAll
不同,它很有用,因为您可能会遍历子数组,并根据需要一次惰性地加载一个,然后在以后需要“获取其余部分”
fetchallifneedd
本质上只是过滤“其余部分”,并发送一个where查询,该查询限制对那些没有数据的子对象进行抓取

在解析文档中,它们在对
fetchallifneedd
的回调响应中有一条注释:

// Objects were fetched and UPDATED.
我想他们的意思是客户端对象被更新了
fetchallifneed
肯定在发送GET调用,因此我怀疑服务器端是否有任何更新。所以这不是什么同步功能。这真的让我很困惑,因为我一想到服务器端更新,它们的真正含义是:

// Client objects were fetched and updated.

猜测“如果需要”与主干对象更改事件/属性()有关。无条件fetchAll将刷新所有内容,触发所有对象的更改事件。if-needed变体只在更改状态与服务器状态不同的对象以及更改其“changed”属性方面做了更多工作。感谢您的提示。这让我开始测试一些东西。事实证明,这与更改属性无关。这是关于是否有属性和值。它主要与您的嵌套子项未包含在父项查询中的情况有关。请看下面我的答案。这是一个极好的发现。现在我明白了,这很有道理。parse中的开发者指南内容非常有用,写得非常好,但它与API参考形成了鲜明对比,API参考中的描述通常只是重复的方法名称。一般来说,parse有相当好的文档,但这篇文档让我很难理解它是如何编写的。:-)谢谢你的帮助!