Ios 如何在创建另一个请求之前等待多个嵌套请求?

Ios 如何在创建另一个请求之前等待多个嵌套请求?,ios,swift,alamofire,grand-central-dispatch,Ios,Swift,Alamofire,Grand Central Dispatch,我有一个刷新控件。当我把它拉下来时,我会发出两个嵌套请求,如下所示: httpClient.fetchCurrentWeather(... httpclient.fetchAnotherPartOfWeather(... delegate.showWeather(...) ) ) 我想在调用另一个组之前等待第一个组完成,因为当我这样做时,由于许多回调值更新,我的视图会闪烁 upd: 我在interactor中进行调用: func retreiveCurre

我有一个刷新控件。当我把它拉下来时,我会发出两个嵌套请求,如下所示:

  httpClient.fetchCurrentWeather(...
    httpclient.fetchAnotherPartOfWeather(...
      delegate.showWeather(...)
    )
   )
我想在调用另一个组之前等待第一个组完成,因为当我这样做时,由于许多回调值更新,我的视图会闪烁

upd: 我在interactor中进行调用:

func retreiveCurrentDailyWeatherForecast() {
        guard let lat = locations?.first?.coordinate.latitude,
            let lon = locations?.first?.coordinate.longitude
            else { return }

        httpClient.fetchCurrentWeather(
            parameters: ["lat": lat,
                         "lon": lon, "units": "metric"],
            completionHandler: { dailyWeatherResult in
                switch dailyWeatherResult {
                case .success(let dailyWeatherResponse):
                    self.httpClient.fetchCurrentHourlyWeather(
                        parameters: ["lat": lat,
                                     "lon": lon, "units": "metric"],
                        completionHandler: { dailyWeeklyHourlyResult in
                            switch dailyWeeklyHourlyResult {
                            case .success(let dailyWeeklyHourlyResponse):
                                let weatherForecast =
                                    self.modelConverter.convertWeatherForecast(dailyWeatherResponse,
                                                                               dailyWeeklyHourlyResponse)
                                self.didRetreieveWeatherForecastFromNetwork(weatherForecast)
                            case .failure(let err):
                                print(err)
                            }
                    })
                case .failure(let err):
                    print(err)
                }
        })
    }

    func didRetreieveWeatherForecastFromNetwork(_ weatherForecast: WeatherForecast?) {
        if let weatherForecast = weatherForecast {
            self.presenter.didRetreiveWeatherForecast(weatherForecast)
        }
    }

在这里,您不需要太高级的东西。您只需输入一个
布尔值(例如:
isRequestIncomplete
)来检查是否收到了上一个请求的响应。下面是一个如何实现这一目标的示例:

if isRequestIncomplete { return }
isRequestIncomplete = true
httpClient.fetchCurrentWeather(...
    httpclient.fetchAnotherPartOfWeather(...
      isRequestIncomplete = false
      delegate.showWeather(...)
    )
   )

在这里,您不需要太高级的东西。您只需输入一个
布尔值(例如:
isRequestIncomplete
)来检查是否收到了上一个请求的响应。下面是一个如何实现这一目标的示例:

if isRequestIncomplete { return }
isRequestIncomplete = true
httpClient.fetchCurrentWeather(...
    httpclient.fetchAnotherPartOfWeather(...
      isRequestIncomplete = false
      delegate.showWeather(...)
    )
   )


我认为您没有显示足够的代码,因为您所显示的内容会满足您的要求。你是在做你在多个值上显示的代码,比如在一个循环中吗。你能展示更多你的代码吗?显示全部回调内容。@rs7,我更新了qestion。@AdamPro13,是的,请参阅上面的代码。@Alexander更新UI并包含在完成处理程序中的语句需要在主线程上执行。哪些函数更新您的UI?可能是天气?我认为您没有显示足够的代码,因为您所显示的内容会满足您的要求。你是在做你在多个值上显示的代码,比如在一个循环中吗。你能展示更多你的代码吗?显示全部回调内容。@rs7,我更新了qestion。@AdamPro13,是的,请参阅上面的代码。@Alexander更新UI并包含在完成处理程序中的语句需要在主线程上执行。哪些函数更新您的UI?可能是天气?您不需要布尔值来检查请求是否完成。完成处理程序是异步执行的。如何判断是否调用了完成处理程序?完成处理程序将按顺序执行,或者其中一个将抛出错误。所以问题在别处。@Frankenstein,我想我可以把你的答案标记为解决方案,因为现在我在调用函数时只调用了两次这些调用。我希望你理解我在这里试图传达的逻辑。你不需要布尔值来检查请求是否完成。完成处理程序是异步执行的。如何判断是否调用了完成处理程序?完成处理程序将按顺序执行,或者其中一个将抛出错误。所以问题在别处。@Frankenstein,我想我可以把你的答案标记为解决方案,因为现在我在调用函数时只调用了两次这些调用。我希望你理解我在这里试图表达的逻辑。