【问题标题】:Make iterations of a loop sequentially in Mutiny在 Mutiny 中按顺序进行循环迭代
【发布时间】:2022-01-11 06:11:27
【问题描述】:

我是响应式编程领域的新手。我目前正在使用 Mutiny 库在 Java 反应式应用程序中工作。

我需要开发一个循环,等待上一次迭代完成才能开始下一次迭代。例如:

List<Uni<T>> uniList = new ArrayList<>();
for (T item : items) { //items is an already fulfilled collection
    uniList.add(this.doSomethingAndReturnInUni(item));
}


return Uni.combine().all().unis(uniList).combinedWith(unisToCombine -> {
    List<T> list = new ArrayList<>();
    unisToCombine.forEach(x ->list.add(x));
    return list;
  });

示例中的 for 循环 每次迭代都会生成一个线程。我想知道如何订购对方法 doSomethingAndReturnInUni() 的第 i 次调用等待 (i-1) 调用触发事件,即按顺序进行 for 循环。是否可以通过这种方式订阅这些事件?

【问题讨论】:

  • 我在 Vertx 中使用 Future 实现了类似的功能。为此我使用了递归,我将项目列表转换为迭代器。我将该迭代器传递给函数,并且每次它执行 iterator.next()。 Future 完成后,我检查迭代器是否有项目,我将再次运行。
  • 这些单词拼写错误,我不相信最接近的单词是在标题secuentially,在正文iteation。请检查。

标签: reactive-programming vert.x quarkus mutiny


【解决方案1】:

我不知道你为什么使用 uni,因为它应该只处理一个操作,for 循环你应该使用 multi,你可以处理背压,并且只有在一个事件完成时才获得下一个事件。 Multi 可以顺序和并行运行。

https://quarkus.io/blog/mutiny-back-pressure/

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多