当前位置: 首页 > 知识库问答 >
问题:

for循环;如何等待下一个函数完成以处理下一个对象?JavaScript[复制]

胥英奕
2023-03-14

请有人帮我;我使用的是for循环,它循环遍历数组中的每个项目(文档名称),每个项目调用一个上传相应文档的函数。

我的问题是在文档完成上传之前,for循环已经移动到下一个项目。如何让我的for循环等到调用函数完成后再处理下一个数组项目?

非常感谢您的帮助。

我的代码

  fileNameArray = [doc1.doc, doc2.doc, doc3.doc];
  fileArrayLength = fileNameArray.length;

  loop = 0;
  for (fa = 0; fa < fileArrayLength; fa++) {
    if (loop == fa) {
      multiupload()
    } else {
      console.log("not ready for " + fileNameArray[fa]);
    };
  };
};

function multiupload(fileName) {
  fileName = fileNameArray[fa];
  //code here uploads document
  loop++;
};

编辑我用下面的代码得到了这个;

function promiseFun() {
  let myPromise = new Promise((resolve, reject) => {
    multiUpload(fileNameArray[index]);

    function multiUpload() {
      //my upload code
      resolve("Success!");
    };
  });
  myPromise.then((successMessage) => {
    index++;
    if (index < fileArrayLength) {
      promiseFun();
    };
  });
};

共有1个答案

梁和颂
2023-03-14

你可以用下面的promise试试

index= 0;

multiUpload(){
var Promise = new Promise(function(resolve, reject) {
  multiuploadPromise(fileNameArray[index]);
}

Promise.then(function (data) {
  index++;
  if(index < fileArrayLength){
   multiUpload();
  }
}
}
 类似资料:
  • 我正在做一个游戏,有三个骰子方块,点击一个按钮就会显示出随机的面孔。图像由css图像精灵生成。如果随机数为1,则骰子立方体将分配给具有图像精灵的css类。 我有一个单独的按钮,当点击它时,应该运行上面的diceroll功能到三个div,ID为dice1、dice2和dice3。 我想用 我研究了一下,但找不到实现最后两行注释代码的方法。请让我知道我的方法是否正确,并帮助我与代码。

  • 问题内容: 我有一个对象列表。对象将传递给延迟函数。我只想在上一次调用解决后才使用下一个对象调用函数。有什么办法可以做到吗? 问题答案: 在ES2017之前和之后(请参见下文中的ES2017中的选项),如果要等待诺言就不能使用,因为诺言没有阻塞。Javascript和Promise不会那样工作。 您可以链接多个promise,并使promise基础结构对它们进行排序。 您可以手动进行迭代,并且仅在

  • 如何进入JavaScript循环? 例如: MDN文档只提到完全打破循环,而不是转移到下一个迭代。

  • 我要做的是异步计算树结构的深度,我将有树的第一层,我想启动一个异步线程来分别计算每个节点的深度。 在计算过程中,树中显然可能有一个分叉,在这一点上,我想踢一个额外的线程来计算那个分支。 我已经得到了这个工作,但我需要做一些整理逻辑,当所有这些未来完成。但我对这一过程中产生的额外的可完成的未来感到困扰。 我会用什么方法来保存所有开始的CompletableFutures+那些动态创建的,并且在执行任

  • 问题内容: 我正在使用bluebird,方法 getAll 和 update return promises。我如何说“等到两个承诺返回,然后更新currentProduct值”?我对JS很陌生… 问题答案: 如果可以使用/,这将很简单。 或者,如果您只能使用简单的承诺,则可以遍历所有产品,并将每个承诺置于最后一个循环中。这样,仅当前一个问题解决时,它才会前进到下一个问题(即使它将首先迭代整个循环

  • 问题内容: 我在node.js中有以下循环 UpdateDetail函数返回一个Promise。在继续循环的下一个迭代之前,我如何等待承诺解决/拒绝。 问题答案: 您可以为此使用异步库。然后转到async.eachSeries。 您需要先执行npm install async 这是示例: