代码之家  ›  专栏  ›  技术社区  ›  DesperateLearner

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

  •  1
  • DesperateLearner  · 技术社区  · 6 年前

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

    下面是一个示例代码:

    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(_:) 附件更新日期() 在数据映射到新值之前首先调用。有人能告诉我正确的方向吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Maxim Volgin    6 年前

    在映射(或任何转换)中订阅是不允许的。您将在“dataStream”中的每个项上创建新订阅,并基本上失去对数据流的所有控制。另外,“unknownda”很可能在执行“onNext:”之前从“.map()”返回。

    你想达到什么目的?