请有人帮我;我使用的是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();
};
});
};
你可以用下面的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 这是示例: