递归调用一个闭包

时间:2016-12-03 11:12:49

标签: ios swift recursion closures

在我正在处理的聊天应用中,我需要将从联系人中获取的电话号码发送到API并检索已在应用中注册的号码。

由于联系人列表可能很长,我计划分批发送电话号码(每个请求20个)。并根据每个返回的响应更新UI。

private(set) var registeredContacts: [RegContact] = []

let phoneNumbersInBatches: [[String]] = [[]]

for batch in phoneNumbersInBatches {
    ApiClient.sharedInstance.getRegisteredContacts(from: batch) { contacts, error in
        // Saving to database
        // Update the UI
        // ...

        self.registeredContacts += contacts
    }
}

我想一个接一个地发送每个批次。换句话说,就像我希望这个过程一样。

  

发送批次 - >得到回应 - >更新UI(如果有注册用户) - >发送下一批 - > ...

但是getRegisteredContacts是一个闭包,for循环只是一个接一个地发送所有请求而不等待先前的请求完成。

如果上一次请求完成后,如何让它等待并触发每个后续请求?

1 个答案:

答案 0 :(得分:0)

如果我说得对,你想要这样的东西:

 /**
 * @Route("/{_locale}/newsletter/", defaults={"_locale": "nl"}, requirements={"_locale": "nl|en|de"}, name="_newsletter")
 */
public function footerAction(Request $request)
{
    $form = $this->createForm(new NewsletterType());
    $form->handleRequest($request);

    if ($form->isValid()) {
        return $this->redirectToRoute('_404');
    } else {
        return $this->render('MyBundle:global:footer.html.twig', array('form' => $form->createView()));
    }
}