在 Mutiny 中按顺序进行循环迭代
Make iterations of a loop sequentially in Mutiny
我是响应式编程领域的新手。我目前正在使用 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循环,每次迭代生成一个线程。我想知道如何命令第i次调用方法doSomethingAndReturnInUni()等待第(i-1)次调用触发事件,即顺序进行for循环。可以用这样的方式来描述那些事件吗?
我不知道你为什么要使用 uni,因为它应该只处理一个操作,for 循环你应该使用 multi,你可以在其中处理背压,并且只获取下一个事件,当一个事件是完成的。 Multi可以是运行顺序和并行。
我也做了同样的事情,使用 Multi,请参阅此处的“generateData()”方法:
你能试试这样的吗?
Builder<Item> items = Uni.join().builder();
for (Item item : items) {
builder.add(this.doSomethingAndReturnInUni(item));
}
return builder.joinAll().andCollectFailures()
.flatMap(itemList -> do whatever you need ...) //itemList type is List<Item>
我是响应式编程领域的新手。我目前正在使用 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循环,每次迭代生成一个线程。我想知道如何命令第i次调用方法doSomethingAndReturnInUni()等待第(i-1)次调用触发事件,即顺序进行for循环。可以用这样的方式来描述那些事件吗?
我不知道你为什么要使用 uni,因为它应该只处理一个操作,for 循环你应该使用 multi,你可以在其中处理背压,并且只获取下一个事件,当一个事件是完成的。 Multi可以是运行顺序和并行。
我也做了同样的事情,使用 Multi,请参阅此处的“generateData()”方法:
你能试试这样的吗?
Builder<Item> items = Uni.join().builder();
for (Item item : items) {
builder.add(this.doSomethingAndReturnInUni(item));
}
return builder.joinAll().andCollectFailures()
.flatMap(itemList -> do whatever you need ...) //itemList type is List<Item>