我尝试从GDrive同步更改,所以我正在使用更改api。当我将其与restrictToMyDrive=true
结合使用时,它就像一个护身符。
但是当我尝试扩展它以跟踪共享文件restrictToMyDrive=false
时,我遇到了一些主要缺点。我的结果不一致-parents
字段偶尔丢失。
假设我们有user A
将该文件夹共享到user B
:
rootSharedFolder
=>subFolder
=>subSubFolder
=> File
[如果user B
相对于user A
共享rootSharedFolder
的时间调用更改API,那么在3/10次中,将收到一些内部文件夹,而没有parents
字段。
即使试图在接收到的更改项上使用files.get
API,也会导致parents
字段为空。但是,如果我等待一两分钟然后再次调用它,则结果中确实存在parents
字段。
其他人遇到此问题,也许有解决方法?
谢谢!
仅当在其他用户与您共享项目的时间附近调用
changes api
时,才会发生此行为
父母字段可能由于两个因素而丢失:
在两种情况下,您都会收到相同的信息:文件缺少parents
字段,因此起初没有办法告诉我们哪种情况:
传播问题:
[这是在您完成对Google文件夹的任何更改之前请求一些文件数据时发生的。这就是所谓的传播问题
无法与父母接触:
在这种情况下,您可以访问某个文件,但不能访问它的父文件夹,因此,您无法知道它的父文件夹,因为它没有与您共享。
可以读取here:
- parents-如果发出请求的用户不是共享驱动器的成员并且不能访问父级,则父级不会出现在父级列表中。另外,除了顶级文件夹外,如果文件位于共享驱动器中,则父列表必须仅包含一项。
旁注:您可能对使用SharedDrives感兴趣,该文件是组织而非个人用户拥有的文件,可简化共享过程,并避免在此遇到的问题。
https://developers.google.com/drive/api/v3/enable-shareddrives
如何知道是哪种情况?
一种方法是实施指数退避算法以尝试检索丢失的父字段,如果经过最大尝试次数后仍无法检索,我们可能是第二种情况:
exponentialBackoff(getParent, 7, 300, function(result) {
console.log('the result is',result);
});
// A function that keeps trying, "getParent" until it returns true or has
// tried "max" number of times. First retry has a delay of "delay".
// "callback" is called upon success.
function exponentialBackoff(toTry, max, delay, callback) {
console.log('max',max,'next delay',delay);
var result = toTry();
if (result) {
callback(result);
} else {
if (max > 0) {
setTimeout(function() {
exponentialBackoff(toTry, --max, delay * 2, callback);
}, delay);
} else {
console.log('we give up');
}
}
}
function getParent() {
var percentFail = 0.8;
return Math.random() >= 0.8;
}