模式允许Alamofire同步链接相关请求

时间:2018-05-20 01:06:30

标签: swift httprequest alamofire synchronous

我正在寻找在我的应用程序中实现的模式,这将允许我干净地让我的应用程序从几个http请求中提取信息,其中每个请求需要依次顺序运行,并从中提供信息前者请求下一个请求。我已经完成了this question中的许多解决方案,但许多答案都是针对Swift的旧版本,存在冲突的解决方案,存在非工作解决方案,并且 none解决了从一个请求获取数据的问题到下一个请求。此外,许多想法不会扩展到超过两个请求。

多个请求不重叠的原因是来自先前请求的数据会进入下一个请求。或者可能是这取决于数据,跳过一些http请求可能是有意义的。

我已经尝试过嵌套请求,这些请求适用于一个级别,但不能深入两个或更多级别。它也对逻辑有敌意,需要跳过一些请求。

Alamofire.request(...).responseString { formResponse in
  Alamofire.request(...).responseString { submitResponse in
    Alamofire.request(...).responseString { getDataResponse in 
    // not only is this messy, it also did not proven to wait until all previous threads were done before working on the nested item.
    }
  }
}

我还尝试使用导入的Alamofire-Synchronous包设置一个串行队列:

let serialQ = DispatchQueue(label: "serialQ")
var info1 = ""
var info2 = ""
var info3 = ""

serialQ.async {
  Alamofire.request(...).responseString { formResponse in
    ....
    info1 = "good stuff"
  }
}

serialQ.async {
  Alamofire.request(...).responseString { submitResponse in 
    ....
    if info1 == "x" {...}
    info2 = "more good stuff"
  }

}

serialQ.async {
  Alamofire.request(...).responseString { getDataResponse in 
    ....
    if info2 == "x" {...}
    info3 = "even more good stuff"
  }
}

上面的代码就好像包的同步功能没有做任何事情来防止Alamofire产生并发线程。换句话说,它只是一个接一个地完成所有请求。这可能有用,我没有看到我的代码实际使用了包中的代码。

我也尝试使用this SO answer中提出的想法,但我无法让它发挥作用。事实上,我已经完成了那个问题的所有答案,并且没有一个证明适用于我或某些"链接"解决方案没有回答如何将数据从一个请求提供给下一个请求的问题。

我必须让它变得比以前更难!

发出http请求,等待结果,并在下一个http请求中使用它(以及下一个和下一个),必须有一个优雅的swift / Alamofire编程模式。

这个问题的一个很好的答案将使读者能够使用现代/当前版本的Swift和Alamofire构建代码,这将链接几个http调用,其中来自前一个请求的响应在下一个请求中使用。我在我的示例中使用了3个相关请求,但应扩展到" n"没有陷入困境。

0 个答案:

没有答案