Я бы создал последовательную очередь, и при каждом нажатии кнопки я увеличивал счетчик в процессе (например, func incrementRequestCount ()) в этой последовательной очереди, чтобы указать, сколько запросов необходимо сделать.
Затем я бы запустил процесс (например, func invokeWebRequestIfNeeded ()) в этой последовательной очереди, который проверяет значение счетчика, а если оно больше 0, уменьшает его и вызывает ваш метод для выполнения веб-запроса.
Когда я получаю ответ из Интернета, я выполняю любую необходимую обработку (в последовательной очереди), а затем снова вызываю invokeWebRequestIfNeeded ().
Если пользователь нажал кнопку, когда это происходило, то счетчик будет один или несколько, поэтому invokeWebRequestIfNeeded () снова вызовет ваш метод.
В конце концов количество требуемых запросов упадет до нуля, и invokeWebRequestIfNeeded () завершится без действий.
Может быть, есть более быстрые способы сделать это ... но когда меня бросают, мне нравятся вещи простые и очевидные.