如何从两个不同的 api 模拟中获取数据?迅速

Posted

技术标签:

【中文标题】如何从两个不同的 api 模拟中获取数据?迅速【英文标题】:how to fetch data from two different api simulations? swift 【发布时间】:2017-07-31 04:37:17 【问题描述】:

我想知道,根据我参加过的一次工作面试,如何获取 2 个不同的 API 调用 - 比如说电影名称和国际语言支持 API 如何将其中 2 个一起下载到一个表格视图中?

提前谢谢你,这对我有很大帮助

【问题讨论】:

我在下面给出了答案 在下面查看我的答案。 【参考方案1】:

很简单,你必须创建请求链并在获得两个结果后重新加载表格视图

您已经从两个服务响应中创建了字典数组

例如说 first 将只返回 arrayForMovieName:["a","b","c"]

而 Second 将只返回 arrayForLanguage:["Hindi","English","etc"]

现在将这两个数组合并到您创建的第三个字典数组中,例如

arrForMovieWithLanguage = [[movie:"a","language":["Hindi","English"]],[movie:"b","language":["English"]]]

解决方案:1 对两种服务都采用布尔值

var isLanguageGet:Bool = false
var isMovieGet:Bool = false
wsGetMovie()

  isMovieGet = true
  if isLanguageGet
   self.tableView.reloadData() 
  

wsGetLanguage()

  isLanguageGet = true
  if isMovieGet
   self.tableView.reloadData() 
  

解决方案:2 使 web 服务调用同步

wsGetMovie()

 wsGetLanguage()

wsGetLanguage()

self.tableView.reloadData() 

【讨论】:

同步调用将是执行此操作的最佳方法。进行第一次 API 调用,并在成功后进行第二次 API 调用,如 Sol2 所示。如果这些 API 中的任何一个失败,您只需提供错误警报即可。 感谢重播【参考方案2】:

您可以使用闭包异步等待另一个 API 响应。我只是给你一个实施的想法。之后,您可以根据您的要求实施。

根据我的要求,它需要首次服务的欧元价格。之后,另一个 API 需要该欧元价格并将返回付款数据。所以,我实现了这个场景,如下所示。

func getPaymentDetail(euroPrice: Double, completion: @escaping (Result<JSON>) -> Void) 
    // Call second API and return result in completion closure.
  if response.result.isSuccess 
     completion(response.result)
  
 // For failure handle here.


func getPriceOfEuro(rate: @escaping (Double) -> Void) 
    // Here I get Euro price.

然后按如下顺序绑定它们。

getPriceOfEuro(rate:  (price) in
   self.getPaymentDetail(euroPrice: price, completion:  (result) in    
          // Take data from result and reload Table.
     )
)

【讨论】:

以上是关于如何从两个不同的 api 模拟中获取数据?迅速的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Facebook API 获取数据

axios 调用从第一个 api 获取响应并传递到第二个 api

如何从两个不同的活动中保存和获取 SQLite 中的数据?

从 api 获取数据时出现空白屏幕

如何使用两个不同的列 mySQL 从查询而不是其他查询中获取数据? [复制]

在golang中进行集成测试时如何模拟外部http请求api