Javascript Dropbox JS SDK:执行i++;里面。然后功能
我对这个问题的命名有些费劲,但我会尽快解释 我正在使用Dropbox JavaScript SDK从特定文件夹检索共享链接。首先,我使用以下代码从文件夹中检索文件:Javascript Dropbox JS SDK:执行i++;里面。然后功能,javascript,dropbox,dropbox-sdk-js,Javascript,Dropbox,Dropbox Sdk Js,我对这个问题的命名有些费劲,但我会尽快解释 我正在使用Dropbox JavaScript SDK从特定文件夹检索共享链接。首先,我使用以下代码从文件夹中检索文件: var DROPBOX_PATH = path; var ACCESS_TOKEN = '***'; var dbx = new Dropbox({ accessToken: ACCESS_TOKEN }); function listFiles() { dbx.filesListFolder({ path: DROPBOX_
var DROPBOX_PATH = path;
var ACCESS_TOKEN = '***';
var dbx = new Dropbox({ accessToken: ACCESS_TOKEN });
function listFiles() {
dbx.filesListFolder({ path: DROPBOX_PATH })
.then(function(response) {
displayFiles(response.entries);
})
.catch(function(error) {
console.error(error);
});
return false;
}
然后,我将在这些文件中循环使用dbx.sharingGetSharedLinks()
,dbx.filesGetTemporaryLink()
以及dbx.sharingGetSharedLinkFile()
,并获取它们的链接。问题是,如果文件夹包含几个文件,并且我想使用
元素来显示进度,那么这个过程可能需要一些时间
首先,我尝试使用for(var I=0;I
循环来包装上述三个函数,并将I
添加到dbx.sharingGetSharedLinkFile()
的进程下的进度条值中,但它们并不同步--i
值在所有这些函数到达各自的端点并可以输出任何内容之前增加
我尝试用while()
循环替换它,并将I++
放在最后一个dbx函数中,但这只会使我的web浏览器过载,并可能导致无休止的循环
有没有办法使i
值与dbx.sharingGetSharedLinkFile().then()对应增加
要实现预期行为,需要使用函数而不是循环进行迭代
您当前的代码不会像预期的那样工作,因为dropbox api方法SharingGetSharedLink
的回调只有在完成对dropbox服务器(在此方法内)的异步请求后才会运行,而主循环将继续在文件列表中迭代
最后,这一切都是关于承诺的,因此我尝试通过以下链接和小代码示例为您指出正确的方向:
function displayFiles(files) {
//... your code
// i'll show you only changes
var i = 0;
(function listNextFile(){
let file = files[i]
if (file) {
var name = file.name.slice(4).slice(0, -7).replace('_', '/'),
file_path = file.path_display;
dbx.sharingGetSharedLinks({ path : file_path }).then(function(response){
// ...
// there is your code
// after all you need to icrease counter and call function again
i++
listNextFile();
});
}
})()
}
你的代码真的很乱。如果您能够使用es6或q
库。就用这样的承诺吧
var承诺=[];
files.forEach((文件)=>{
push(sharingGetSharedLinks(文件路径)。然后(fileGetTemporaryLinks(下载路径))。然后(sharingGetSharedLinkFile(下载url));
});
承诺。所有(承诺)。然后((值)=>{
//值是响应数组,其中每个响应是每个文件的三个请求
});代码>