Невозможно помешать кому-либо позвонить слишком рано.Что бы вы хотели, чтобы произошло, если бы они вызвали его слишком рано?
Похоже, ваш код в настоящее время возвращает пустой массив, если allEventTypes еще не заполнен. Вы можете решить, является ли пустой массивправильный результат, или если вы должны сгенерировать исключение, когда оно вызывается слишком рано, чтобы абоненту было абсолютно ясно, что данные еще не доступны.
Вы можете предоставить некоторый вспомогательный код для людей, которым нужна эта информация, ноэто может быть еще не доступно.Например, вы можете разрешить им регистрировать обратный вызов, который будет вызываться из обработчика успеха после заполнения данных. Вы можете разрешить им запрашивать, доступны ли еще данные.
Если вы не 'Если вы хотите, чтобы ответственность за синхронизацию была на звонящих, вы не можете предложить синхронный способ получения этой информации.Вместо этого вы бы предложили только механизм обратного вызова для получения данных.Если данные готовы, обратный вызов будет вызван немедленно.Если данные не готовы, обратный вызов вызывается после завершения функции ajax.В любом случае вызывающая сторона должна будет обрабатывать данные только в обратном вызове, и getEventTypeIds не будет обычным вызовом для получения данных, как сейчас, а скорее вызовом для регистрации обратного вызова, который будет вызываться с данными, когда былготовы.Это избавило бы вызывающего от необходимости знать детали реализации, когда данные были готовы, но заставило бы их использовать асинхронный характер механизма обратного вызова.
this.getEventTypeIds = function(callback) {
if (allEventTypes.length > 0) {
// data is ready call the callback with the data now
} else {
// store the callback to be called later from the success handler
}
}