Javascript Dropbox JS SDK:执行i++;里面。然后功能

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_

我对这个问题的命名有些费劲,但我会尽快解释

我正在使用Dropbox JavaScript SDK从特定文件夹检索共享链接。首先,我使用以下代码从文件夹中检索文件:

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));
});
承诺。所有(承诺)。然后((值)=>{
//值是响应数组,其中每个响应是每个文件的三个请求
});