Я звоню в три службы подряд. Когда я вызываю третий сервис, мне нужно использовать переменную из ответа первого сервиса, которая равна userModel
. Я могу получить второй сервисный ответ, из которого initModel
, но не могу достичь первой модели userModel
. Мой вопрос заключается в том, как я могу использовать userModel в готовом блоке, возвращая его, а затем блокировать?
PS: Я пытался вернуть -> Promise<(UserModel,InstallationModel)>
при первом вызове, но поскольку UserModel
уже является объектом, а не обещанием, мне нужно преобразовать его в обещание вернуть его. Похоже, я плохой способ сделать это.
Как вы можете видеть, я храню это с self.userModel = userModel
, что я не хочу делать.
func callService(completionHandler: @escaping (Result<UserModel>) -> Void) {
SandboxService.createsandboxUser().then { userModel -> Promise<InstallationModel> in
self.userModel = userModel
return SandboxService.initializeClient(publicKey: self.keyPairs.publicKey)
}.then { initModel -> Promise<DeviceServerResponseModel> in
self.initModel = initModel
if let unwrappedUserModel = self.userModel {
return SandboxService.deviceServerServiceCaller(authKey: initModel.token.token,apiKey:unwrappedUserModel.apiKey,privaKey: self.keyPairs.privateKey)
}
throw ServiceError.handleParseError()
}.then { serverResponseModel -> Promise<UserModel> in
if let unwrappedInitModel = self.initModel, let unwrappedUserModel = self.userModel {
return SandboxService.sessionServiceCaller(authKey: unwrappedInitModel.token.token, apiKey: unwrappedUserModel.apiKey, privaKey: self.keyPairs.privateKey)
}
throw ServiceError.handleParseError()
}.done { userModel in
completionHandler(Result.success(userModel))
}.catch { error in
completionHandler(Result.error(error))
}
}