在 Promise 中使用循环的正确方法

2023-12-15

根据这个link(菜鸟错误#2)我不应该在 Promises 中使用循环,而是Promise.all(iterable).

这真的适用于所有循环吗?Promise.all(iterable)接受一个大小为 n 的数组。如果我用Promise.all(iterable),然后我会得到一个结果(即 iterable_A)一个大小为 n 的数组。

如果我想迭代 iterable,并且只想将满足条件的某些元素放入另一个 iterable(例如 iterable_B)并希望返回 iterable_B 而不是 iterable_A,该怎么办?我应该使用Promise.all() too?


我不应该在 Promise 中使用循环

不,相反:您不应该在循环中使用 Promise。

当然这也太笼统了。有时您只需要一个循环结构。你绝对不能做的是忘记收集在循环体中创建的承诺在一些可以传递给的迭代中Promise.all,等待该循环中开始的所有异步事物。

The map method正如文章中所建议的,自然可以做到这一点,你只需要return来自回调的承诺(一如既往)。使用for/while/.forEach使它变得有点困难,因为您必须手动将承诺推送到某个数组中(这不仅丑陋而且容易出错)。

但是,如果您不在循环内处理异步任务,则可以执行任何您想做的操作。例如,两者

Promise.all(values.filter(syncPredicate).map(asyncFn))

and

Promise.all(promises).then((values) => values.filter(syncPredicate))

完全没问题。当您有异步过滤谓词时,它确实会变得有点复杂,我建议在这种情况下寻找 Promise 实用程序库。

此外,您还必须意识到从同步循环构造中启动的异步任务将并行运行。如果您打算按顺序运行它们(等待每次迭代),您应该尝试制定循环使用递归结构.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Promise 中使用循环的正确方法 的相关文章

随机推荐

  • Android Wear OS 表盘 支持不同屏幕尺寸

    我正在玩 Wear OS 的表盘 目前 我已经创建了 背景 320x320 刻度圈 320x320 时针 分针和秒针 320x40 在屏幕尺寸为 320x320 的圆形设备上一切正常 当我使用屏幕尺寸为 360x360 的设备时 事情变得复
  • 根据数据属性的值选择选项

    我想选择 又名 jQuery 预选择 并根据数据变量设置值 该列表有 3 个具有相同值但不同 data d 的项目 假设我有变量selectvar d 那么它应该更改为列表中的 2 项
  • 如何在 Symfony2 路由中定义默认日期值?

    如果我想创建一条路线 其中年月日是变量 如何定义如果这些变量为空 则采用当前日期 例如 像这样 肯定行不通 blog path blog year month day defaults controller AcmeBlogBundle B
  • 我已经安装了 Visual Studio 2015,但没有 C++ 项目。?

    我遇到问题 我想在 Visual Studio 2015 中编写 C 代码 但无法创建 C 项目 因为 新建项目 窗口中没有 C 模板 我正在以这种方式创建新项目文件 gt 新建 gt 项目 gt Visual C 但没有c 模板 请帮忙
  • 当我按下屏幕 ionic 3 时菜单不起作用

    我有一个屏幕登录 主页带有菜单 4 个选项卡 喜欢home about location more 在这种情况下菜单工作正常 当我登录时 我使用下面的代码将屏幕导航到带有所有选项卡 菜单的主页 那个时候工作正常 this navCtrl p
  • 使用 App SDK 2.0 中的新数据更新图表

    我正在使用图表来可视化数据TimeboxScopedApp 我想在范围发生变化时更新数据 使用更暴力的方法remove 然后按照描述重新绘制图表here给我留下了一个覆盖的 正在加载 蒙版 但其他方面都有效 使用 Highchart 原生的
  • mysql存储过程可以有默认参数吗?

    我用谷歌搜索了这个并不断提出 不 这是不可能的 但这些帖子的日期是 2005 2007 年 所以我想知道这是否已经改变 代码示例 CREATE PROCEDURE blah myDefaultParam int 0 This breaks
  • 如何获取特定应用程序的电池和移动数据使用情况?

    背景 从某些 Android 版本 不记得是哪个 开始 Android 能够显示已安装应用程序的电池统计信息和移动数据使用情况 3G 以便用户意识到这一点并将能够思考应用程序是否应该保留 我正在谈论那些 问题 我在 Play 商店上看到过一
  • 导航视图全局操作返回状态

    我一直在搞乱 Jetpack 导航组件 并且创建了一个使用导航抽屉的活动 class MainActivity AppCompatActivity override fun onCreate savedInstanceState Bundl
  • 为什么CPU推测执行不会导致OOB程序崩溃?

    问题源于阅读幽灵攻击纸 如果我理解正确的话 攻击源于 CPU 启发式推测执行 错误 代码分支的可能性 考虑这个例子 C语言 int arr 42 if i lt 42 int j arr i 如果我正确理解这篇论文 int j arr i
  • 可以在 fpdf 中嵌入 fontawesome 字体吗?

    我想在 pdf 中使用 fontawesome 我使用 php 库 fpdf 和字体嵌入生成 pdf 但是我无法让它发挥作用 我使用这个工具生成afm文件 http fpdf fruit lab de 但是当我尝试使用 fontawesom
  • Typescript - 如何创建三状态切换按钮,单击时会更改颜色和文本

    我正在使用打字稿编码来开发一个可以改变三种状态的按钮 即 单击时循环更改颜色和文本 我在下面附上了互动 有人可以帮忙编写下面的交互代码吗 D 点击查看互动gif 您可以创建不同状态 标签和样式 的数组 并在单击按钮时循环遍历它 当到达数组的
  • Java 中的查找表?

    在我的计算机科学课程中 我们正在学习查找表 但我们的老师没有在他发布的课程页面中提供任何示例 也没有在他提供的视频中提供任何示例 他所做的只是告诉我们那是什么 但他希望我们在下一次作业中使用它们 但他未能给我们提供如何做到这一点的例子 在学
  • 字符串“”在 IE 中导致错误

    如果我将这段 html 添加到我的页面中 IE 7 0 显示语法错误 左下角有感叹号 未终止的字符串常量 如果我只更改一个字母 任何一个 错误就会消失 看起来 IE 不喜欢这个特定的单词 包括括号 有什么想法吗 谢谢你 安德烈 这对我有用
  • flutter iOS 构建失败(ld:找不到 -lPods-Runner 的库)

    我是颤振的新手 我创建了小型 flutter 应用程序 我想在我的真实设备上测试它 但我无法生成 ios ipa 文件进行测试 如果有人可以帮助我解决这个问题 那么这对我有好处 提前致谢 我收到这个错误 iMac test app sneh
  • GAE 不支持 java.awt.*?如何解决这个问题?

    BufferedImage 图像 new BufferedImage 宽度 高度 BufferedImage TYPE INT RGB 在应用程序引擎中 我发现它不起作用 它说GAE不支持java awt image bufferedIma
  • r markdown biblio-style 不起作用

    我在改变论文中参考书目的引用风格时遇到了一些麻烦 根据r 降价指定围兜样式 我需要acm from latex 我只需要执行以下操作 title title bibliography biblioteka bib biblio style
  • 是个 。在 .Cells 定义时是否需要在 .Range 中?

    人们普遍认为这不是 最佳实践 dim rng as range with thisworkbook lt possibly set an external workbook with worksheets sheet1 set rng ra
  • C++ 将字符串(或 char*)转换为 wstring(或 wchar_t*)

    string s wstring ws FUNCTION s ws 我如何将 s 的内容分配给 ws 搜索谷歌并使用了一些技术 但他们无法分配确切的内容 内容被扭曲 NOTE See 注意事项 2023 10 05 在底部 假设示例中的输入
  • 在 Promise 中使用循环的正确方法

    根据这个link 菜鸟错误 2 我不应该在 Promises 中使用循环 而是Promise all iterable 这真的适用于所有循环吗 Promise all iterable 接受一个大小为 n 的数组 如果我用Promise a