RxSwift-映射后函数的调用顺序

时间:2018-07-26 05:27:38

标签: swift reactive-programming rx-swift

我正在尝试成功完成映射后调用一个函数。 可观察对象是通过映射从现有流创建的。在映射块内,我订阅以获取映射到最终类型的输出。随着更新的流,我正在考虑调用该函数。但是在我订阅并将其映射到更新的流之前会调用该函数。

这是示例代码:

let updatedDataStream = dataStream
            .observeOn(MainScheduler.instance)
            .map { (data) -> ViewData? in

            guard var unknownData = data as? UnknownDataType,
                let location = unknownData.dataPoints.first?.location else  {
                    return data
                }

                let dataModel = DataModel(x: location.x, y: location.y)

                self.dataStore.localStore?
                    .entity(forID: DataModel.entityID)
                    .filter({$0?.status == .Success})
                    .take(1)
                    .unwrap()
                    .subscribe(onNext: { (localDataModel) in

                        guard let value = localDataModel.dataValue, value.count > 0 else {
                            return
                        }

                        unknownData.value = value

                    }).disposed(by: self.disposeBag)
                return unknownData
        }

        self.attachUpdatedData(updatedDataStream)

attachUpdatedData(_:)仅在检索了updatedDataStream之后才被调用。通过上述实现,在将数据映射到新值之前首先调用attachUpdatedData(_:)。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

在地图内订阅(或进行任何转换)是不行的。您将在'dataStream'的每个项目上创建一个新的订阅,并且实际上将失去对数据流的所有控制。同样,在执行“ onNext:”之前,很可能从“ .map()”返回“ unknownData”。

您要达到什么目标?