Асинхронные вызовы по своей природе не запускаются до завершения, а затем вызывают следующее. Они немедленно возвращаются, прежде чем задача, которую они попросят завершить, даже запланирована.
Вам нужен какой-то метод, чтобы вторая задача дождалась завершения первой.
NauralInOva дал одно хорошее решение: используйте пару NSOprations и заставьте их зависеть друг от друга. Вы также можете поместить 2 операции в очередность очереди, а вторая не будет начинаться до тех пор, пока первая не будет завершена.
Однако, если эти вызовы вызвать операцию асинхронной в другом потоке, они все еще могут вернуться и очередь операция может вызвать второй операции (getContacts()
вызова, не дожидаясь signIn()
, чтобы закончить.
Другой вариант, чтобы установить до первой функции взять функцию обратного вызова:
signIn(callback: {
getContacts()
}
Третий вариант заключается в разработке объекта регистрации, которая принимает делегат и объект Войти назовете signInComplete
метод на делегат, как только зарегистрировались завершена
.
Это настолько распространенная вещь, что большинство сетевых API создаются для этого «из коробки». Я был бы шокирован, если бы у Google API не было средств для этого.
Какую платформу Google вы используете? Можете ли вы указать на документацию?
Изобразительное. В чем был вопрос? – JeremyP
Как правило, такие методы, как ваш знак 'signIn', передаются в замыкание, которое вызывается после завершения метода, например:' signIn() {getContacts()} ', хотя для этого требуется реинжиниринг метода. – Robert