遍历多个Ajax请求后未触发Promises.all

时间:2018-12-14 13:00:28

标签: javascript asynchronous es6-promise

我正在导入一个json文件并遍历该对象。 每个对象都有一个带有eventID的数组,我也通过它进行循环。 在此forEach中,我推送了一个包装函数,该函数将Promise返回到数组State

遍历所有对象后,我在promises数组上执行promise.all()。但是奇怪的是,在此循环之后我没有执行任何操作。

promises

2 个答案:

答案 0 :(得分:1)

调查后,该行:

topic_title = table_tag.find('a', href=True) if topic_title: datum = { 'topic_title': topic_title['title'], 'topic_text': topic_title.text } data.append(datum)

是主要问题(许多其他问题通过评论解决)。

要说明的问题是,if (country.eventIDs.length === 0) return不是跳过循环项(也许是预期的),而是在return回调中返回void,因此进一步跳过该块的执行。

如果条件成立,则要“跳过”该项目,只需执行此操作

then

答案 1 :(得分:0)

更好的是捕获每个承诺的每个结果。因为如果您想要.All的响应数组。如果其中一项承诺被拒绝,您将不会有结果。

const results = [];

country.eventIDs.forEach(id => promises.push(getEventData(country, id)
.then(res =>  results.push(res));

Promise.all(promises).then(()=> writeFile(results))

Stackblitz Example