Невозможно подключиться к другому потоку RxSwift на основе проверки - PullRequest
1 голос
/ 28 июня 2019

Невозможно подключиться к другому потоку RxSwift на основе проверки, которая была добавлена ​​перед запросом сети.

Я создаю объект UserProfile, но хочу убедиться, что объект userProfile был полностью создан. У меня есть поток, который создает объект userProfile, но теперь у меня есть проверка. Я хочу подключиться к предыдущему потоку, чтобы после завершения UserProfile я мог выполнить сетевой запрос. Я не уверен, как подключиться к предыдущему потоку. UpdateUserProfile ($ 0) - это место, где я передаю объект UserProfile, чтобы выполнить сетевой запрос, но я хочу убедиться, что я остановился на этом.

let userInfoResponse = latestLocallySavedUserProfileDictionary
            .map { (dictionary: [String: String?]) in
               return UserProfile(
                    firstName: dictionary["firstName"] ?? "",
                    lastName: dictionary["lastName"] ?? "",
                    phone: dictionary["phone"] ?? "",
                    company: dictionary["company"] ?? "",
                    organizationType: dictionary["organizationType"] ?? "",
                    jobFunction: dictionary["jobFunction"] ?? "",
                    addressLine1: dictionary["addressLine1"] ?? "",
                    addressLine2: dictionary["addressLine2"] ?? "",
                    city: dictionary["city"] ?? "",
                    state: dictionary["state"] ?? nil,
                    zipCode: dictionary["zipCode"] ?? "",
                    country: dictionary["country"] ??  "",
                    languageCode: dictionary["languageCode"] ?? "",
                    merrillDisclaimerAccepted: false, // ignore for now
                    merrillDisclaimerAcceptedDate: "" // ignore for now
                )
            }

            .flatMapLatest { updateUserProfile($0) }
            .share()

        isUserProfileDictionaryComplete = Observable.merge([
            initialUserProfileCall,
            userInfoResponse
                .map{$0.createDictionary()},
            userProfileLocal
            ])
                .asObservable()
                .map{(profileDictionary) -> Bool in
                    return profileDictionary.values.contains(nil) || profileDictionary.values.contains("")
                }
                .ignore(true)

1 Ответ

2 голосов
/ 28 июня 2019

Я не совсем понимаю, что вы пытаетесь сделать, но в целом вам нужно выяснить все события, которые должны вызвать сетевой запрос, и поместить их в поток перед flatMapLatest.

Если вы пытаетесь создать UserProfile из ваших latestLocallySavedUserProfileDictionary, initialUserProfileCall и userProfileLocal, тогда вы можете захотеть поставить сканирование после объединения, чтобы собрать все биты из каждого словаря..

...