如何检测是否需要在JS SDK中获取解析对象

时间:2018-07-27 18:10:12

标签: javascript parse-server

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

根据方法描述,这很有意义,因为这些是有效的指针,我们知道它们已经存在于服务器中。

因此,我可以使用另一种有效的方法来告诉我myObjectobjectC都需要仍然提取,但是objectAobjectB不会吗?

我的用例是减少不必要的includes,从而减​​慢查询速度,在辅助函数中进行不必要的提取以及保持代码的可重用性。现在,在很多情况下,我的查询中包含的对象可能只需要在辅助函数的1/20种情况下使用,或者总是需要获取对象以确保其具有数据,尽管大多数时候已经获取了。在某些情况下,我尝试通过在辅助函数中添加布尔参数来描述已获取的对象,以解决此问题,但这会产生难看的签名。我还想到了仅依靠existed()方法,而不是传递我知道没有获取的对象,而是创建了一个无需数据传递的新指针,但这似乎是不必要的栏。对我来说,拥有这条线更有意义: if( object.needsToBeFetched() ) await object.fetch();可以帮助我在调用助手函数时不必确定是否需要做任何特殊的事情。

0 个答案:

没有答案