ios - 如何在组合中安排异步调用的同步序列?
问题描述
我想在我的应用程序中处理一系列网络调用。每个调用都是异步的,flatMap()
看起来像是正确的调用。但是,flatMap
同时处理所有参数,我需要顺序调用——下一个网络调用只有在前一个网络调用完成后才开始。我查找了 RxSwift答案,但它需要concatMap
Combine 没有的运算符。这是我正在尝试做的事情的粗略轮廓,但同时flatMap
触发myCalls
。
Publishers.Sequence(sequence: urls)
.flatMap { url in
Publishers.Future<Result, Error> { callback in
myCall { data, error in
if let data = data {
callback(.success(data))
} else if let error = error {
callback(.failure(error))
}
}
}
}
解决方案
在操场上尝试了一段时间后,我相信我找到了解决方案,但是如果您有更好的想法,请分享。解决方案是添加maxPublishers
参数flatMap
并将值设置为max(1)
Publishers.Sequence(sequence: urls)
.flatMap(maxPublishers: .max(1)) // <<<<--- here
{ url in
Publishers.Future<Result, Error> { callback in
myCall { data, error in
if let data = data {
callback(.success(data))
} else if let error = error {
callback(.failure(error))
}
}
}
}
推荐阅读
- javascript - Javascript柯里化模式:调用函数时出错
- haskell - 通过 nix-build 运行时是否可以保留 Cabal 生成的测试套件日志?
- excel - 如何扩展 HTML 元素并从表模式中抓取 td 元素?
- php - 使用 PHP 连接服务器时出现“MySQL 服务器已消失”
- c# - 没有日志记录和存储库根有附加程序,但记录器没有附加程序
- python - Tensorflow 使用偏移量扫描多个矩阵行
- python - 列表列表的索引复杂度是多少(例如 list[x][y])
- ios - Ipad 上的 UIView 阴影未正确跨越视图的宽度
- c++ - 编程:使用 C++ 第 2 版的原理和实践,第 5 章演练 - 程序在预期时不会抛出异常
- scheme - 在两个列表上运行的函数