gpt4 book ai didi

javascript - 如何在数组的 forEach 循环中使用 Promise 来填充对象

转载 作者:行者123 更新时间:2023-12-02 22:22:23 25 4
gpt4 key购买 nike

我正在一个数组上运行一个 forEach 循环,并进行两次返回 promise 的调用,我想填充一个对象,比如 this.options,然后用它做其他事情。现在,如果我使用以下代码示例并首先进入 then 函数,我就会遇到异步问题。

$.when.apply($, someArray.map(function(item) {
return $.ajax({...}).then(function(data){...});
})).then(function() {
// all ajax calls done now
});

这是下面的工作代码,但它仅适用于数组中的第一个元素,因为我在响应的 .then 中调用结果函数。我想首先对数组的所有元素进行所有提取,然后调用结果函数来执行某些操作。

array.forEach(function(element) {
return developer.getResources(element)
.then((data) = > {
name = data.items[0];
return developer.getResourceContent(element, file);
})
.then((response) = > {
fileContent = atob(response.content);
self.files.push({
fileName: fileName,
fileType: fileType,
content: fileContent
});
self.resultingFunction(self.files)
}).catch ((error) = > {
console.log('Error: ', error);
})
});

在 forEach 循环完成后,如何填充 self.files 对象,然后使用 files 对象调用结果函数?

最佳答案

Promise.all() 在这里会有帮助:

var promises = [];

array.forEach(function(element) {
promises.push(
developer.getResources(element)
.then((data) = > {
name = data.items[0];
return developer.getResourceContent(element, file);
})
.then((response) = > {
fileContent = atob(response.content);
self.files.push({
fileName: fileName,
fileType: fileType,
content: fileContent
});
}).catch ((error) = > {
console.log('Error: ', error);
})
);
});

Promise.all(promises).then(() =>
self.resultingFunction(self.files)
);

这将为每个项目启动 AJAX 调用,在调用完成后将每次调用的结果添加到 self.files 并调用 self.resultingFunction()所有调用完成后。

编辑:根据 Yury Tarabanko 的建议进行了简化。

关于javascript - 如何在数组的 forEach 循环中使用 Promise 来填充对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38362231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com