当前位置: 首页 > 知识库问答 >
问题:

如何在地图中获得所有promise,其中有超时

齐甫
2023-03-14

我正试图从一张有超时的地图中得到所有的结果。

我尝试使用promise.all(),但由于使用了setTimeout函数,没有成功。

我会很高兴,如果有人可以看看哦,我的代码,并建议如何做正确的。

非常感谢。

new Promise(async (resolve, reject) => {
  Promise.all(
    items.map(async (item, i) => {
      await setTimeout(async () => {
        return await SendMail(item);
      }, 5000 * i);
    })
  ).then((mailsRes) => {
    resolve(mailsRes);
  });
});

共有2个答案

庞鸿骞
2023-03-14

不确定你想要实现什么,但你可能需要这个-

async function timeout(interval) {
    return new Promise(resolve => {
    setTimeout(resolve, interval);
  });
}

new Promise( async (resolve, reject) => {

  Promise.all(items.map( async (item, i)=>{ 
    await timeout(5000 * i).then(() => {
        return await SendMail(item);
    });
  }))
  .then(mailsRes => {
    resolve(mailsRes)
  }) 
          
});

问题是setTimeout会立即解决,并且在下一次回调中会得到一个超时取消器。

卢鸿彩
2023-03-14

只需循环浏览您的项目,并在发送每封电子邮件后休眠x秒(本例中为5秒)。

const sleep = (milliSeconds) => {
    return new Promise((resolve, _reject) => {
      setTimeout(() => {
        resolve()
      }, milliSeconds)
    })
  }

const sendEmails = async (items) => {
    for (let i = 0; i < items.length; i++) {
        const currentItem = items[i];
        await SendMail(currentItem);
        await sleep(5000)
    }
}

正如您看到的sendEmails是一个异步函数,那么您可以通过以下方式调用它:

await sendEmails(items)
 类似资料:
  • 问题内容: 我知道KEYS命令,但这仅返回键(我猜所有的字符串类型都是String),并且显然不认为集合是键。 是否有用于获取数据库中所有集合的命令?其他数据类型(哈希,列表,排序集)又如何呢? http://redis.io/topics/data-types 问题答案: 我知道KEYS命令,但这仅返回键(我猜所有的字符串类型都是String),并且显然不认为集合是键。 不管您的密钥是哪种数据类

  • 我知道,为了获得Redis中所有键的列表,我必须使用,但是有没有一种方法可以将所有键及其值一起输出? 几分钟的搜索没有产生任何结果。 另外,非常感谢您的回答,但我正在寻找一个本地解决方案。我可以自己编写一个函数,遍历的所有输出。

  • 假设我有2个或更多异步调用: 在脚本的后面,我想确保在使用变量之前设置了它们。 此示例代码遵循angularjs中的Firebase示例。 有什么想法吗?

  • 问题内容: 如何在Oracle中获取有关表,表的列和约束等的所有信息?我在用 但这只是给我列名称,空值和类型。 问题答案: 尝试dbms_metadata软件包,您可以在此处找到更多信息

  • 问题内容: 在C#中,我发现了一种非常可爱的方法,该方法使您可以从指定控件中获取所有后代和所有THEIR后代。 我正在寻找JavaFX的类似方法。 我看到了我要使用的类,因为它是派生所有带有孩子的Node类的类。 到目前为止,这是我所拥有的(并且我还没有在Google上通过“ JavaFX从场景中获取所有节点”之类的搜索真正找到任何东西): 那么,如何确定N是否是父母(或从父母继承)呢?我说的对吗

  • 问题内容: 我尝试了很多不同的方法,但是总是会遇到语法错误。 我有两个表-tableA和tableB。它们都具有con_number字段作为唯一ID。我想选择tableB中不存在于tableA中的所有行。 有人可以给我这个查询,就像在MS Access中一样吗? 我知道在这种情况下使用NOT IN效率很低,因此,如果有更好的方法,那就太好了。 谢谢。 问题答案: