解决承诺或在数组push()方法之后添加回调

时间:2019-03-23 01:55:49

标签: javascript ecmascript-6 es6-promise

我在长数组上使用map(),并对每个值使用访存。这将需要很多秒才能完成。我想知道最后一次推送何时完成并使用数组中的数据。

我尝试了Promise,Promise.all,Async / Await,但是可能错过了一些显而易见的事情。我创建此示例代码是为了更简单地说明问题。

const arr = new Array(100).fill("todos")
const arrPush = []

const result = arr.map(data => {
  fetch(`https://jsonplaceholder.typicode.com/${data}`)
  .then(res => res.json())
  .then(res => arrPush.push(res))
})

Promise.all(result).then(() => console.log(arrPush))

将最终值添加到数组后,执行一些操作。在这种情况下,console.log是完整的阵列。

1 个答案:

答案 0 :(得分:2)

您要传递给map的函数没有return语句,因此resultundefined的数组。结果,Promise.all没有什么可以等待的。

此外,无需手动将其推入阵列。一旦我们添加了return语句,您将获得一个Promise数组,Promise.all将解析为一个包含您当前要推送的所有内容的数组。

所以尝试一下:

const arr = new Array(100).fill("todos")
const promises = arr.map(data => {
  return fetch(`https://jsonplaceholder.typicode.com/${data}`)
    .then(res => res.json());
});

Promise.all(promises)
  .then(arrayOfResults => console.log(arrayOfResults));