如何在forEach循环后填充数组

时间:2017-02-24 10:08:59

标签: javascript arrays foreach es6-promise

const tileApiPromises = [];
 response.data.forEach((tile) => {
     return getPartnerToken(tile.id).then((response) => {
         tileApiPromises.push(getTileContent(tile, response));
     });
 });
 console.log(tileApiPromises) // should give me an array of promises
 Promise.all(tileApiPromises) // The goal is to execute this.

我在日志中得到空数组。如何在forEach之外获得带有promise的数组。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

代码的问题在于推送是异步完成的 - 因此,数组中没有任何内容!

你说你试过地图(在评论中) - 你试过这样吗?

const tileApiPromises = response.data.map((tile) => {
     return getPartnerToken(tile.id).then((response) => {
         return getTileContent(tile, response);
     });
 });

或者,性感

const tileApiPromises = response.data.map(tile => 
    getPartnerToken(tile.id).then(response => getTileContent(tile, response))
);

答案 1 :(得分:0)

您可以使用Array.map函数而不是forEach。

forEach始终返回undefined。

map函数迭代所提供的数组,并返回map函数中提供的回调中返回的累积值数组。

这是关于地图功能的很好的文档。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map