【问题标题】:how to make an iterable of promises programmatically js?如何以编程方式 js 制作可迭代的 Promise?
【发布时间】:2021-07-09 16:45:01
【问题描述】:

我正在尝试创建一个函数,以编程方式生成可迭代的 Promise,以通过使用 promise.all 来调用它们,如下所示:

   const fetchRandomItems = async (numberOfItems) => 
   const myPromises = [fetchRandomItem, fetchRandomItem, fetchRandomItem] // The length of this array should be equal to numberOfItems
   promise.all(myPromises)
}

我不知道如何让 myPromises 的长度等于 numberOfItems

请,谢谢!

【问题讨论】:

  • 使用for 循环?
  • 我不太明白你的问题,所以我能建议的最简单的事情是let mypromises = []; for (let i= 0; i < numberofitems; i++) myPromises.push(fetchRandomItem); Promise.all(myPromises),其中fetchRandomItem 是一个承诺。如果这不是您要问的,请详细说明您的问题...
  • 谢谢,我没有意识到这是一件简单的事情,无论如何谢谢;)

标签: javascript asynchronous


【解决方案1】:

您构建一个数组,就好像 Promise 是任何其他对象一样。

const fetchRandomItems = numberOfItems => {
    const myPromises = [];
    for (let i = 0; i < numberOfItems; i++) {
        myPromises.push(fetchRandomItem());
    }
    return Promise.all(myPromises);
}

const fetchRandomItems = numberOfItems => 
    Promise.all([...Array(numberOfItems)].map(() => fetchRandomItem()))

【讨论】:

  • 谢谢你,你真的帮了我很多:D
  • 一个问题,在for循环的第一行,当myPromises.push(fetchRandomItem())运行的时候,fetchRandomItem()就成立了?
  • @sankiago 我不确定我是否理解您的问题,但此代码假定 fetchRandomItem() 是一个异步函数。异步函数返回承诺。
猜你喜欢
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多