TL; DR-标题。不过,这就是我的想法以及为什么需要它:
我正在尝试寻找一种可靠的方法来查看是否需要使用Parse Javascript SDK提取对象。与Parse iOS SDK的dataAvailable方法类似
我发现了一种existed方法,该方法在某些情况下有效。
如果此对象是由解析服务器创建的,则该对象可能已经存在(例如,以Facebook登录为例),则返回true
如果我做类似的事情
let myObject = new Parse.Object('MyClass');
myObject.id = 'myObjectId';
myObject.existed(); // false
即使这是一个有效的对象ID,也将是错误的,这对我的某些情况很有帮助。
不幸的是,我无法使用此方法来知道存储为指针的对象是否是需要获取的外壳。在此示例中,ClassA具有两个指针,即classB和classC。我包括classB,但不包括classC。两者都将返回true:
let objectAQuery = new Parse.Query('ClassA').include('classB');
let objectA = await objectAQuery.first();
let objectB = objectA.get('classB'),
objectC = objectA.get('classC');
objectA.existed(); // true
objectB.existed(); // true
objectC.existed(); // true
根据方法描述,这很有意义,因为这些是有效的指针,我们知道它们已经存在于服务器中。
因此,我可以使用另一种有效的方法来告诉我myObject
和objectC
都需要仍然提取,但是objectA
和objectB
不会吗?
我的用例是减少不必要的includes
,从而减慢查询速度,在辅助函数中进行不必要的提取以及保持代码的可重用性。现在,在很多情况下,我的查询中包含的对象可能只需要在辅助函数的1/20种情况下使用,或者总是需要获取对象以确保其具有数据,尽管大多数时候已经获取了。在某些情况下,我尝试通过在辅助函数中添加布尔参数来描述已获取的对象,以解决此问题,但这会产生难看的签名。我还想到了仅依靠existed()
方法,而不是传递我知道没有获取的对象,而是创建了一个无需数据传递的新指针,但这似乎是不必要的栏。对我来说,拥有这条线更有意义:
if( object.needsToBeFetched() ) await object.fetch();
可以帮助我在调用助手函数时不必确定是否需要做任何特殊的事情。