Код в вопросе немного неясен относительно ожидаемого результата. Давайте пройдемся по нему ...
Первый shiftReportRef определен
let shiftReportsRef =
Database.database (). Ссылки (). Ребенок (Constants.FireBase (). Пользователей) .child (Constants.FireBase (). ShiftReports) .child (firebaseToken) .child (cashierId.stringValue) .child (todayDate) .child (posPointId.stringValue) .child (shiftid.stringValue)
затем к этой ссылке добавляется наблюдатель. Наблюдателем является .value, который будет наблюдать за любыми изменениями в этом узле и возвращать их в моментальном снимке через событие
shiftReportsRef?.observe(.value
Но затем, когда происходит первое событие и выполняется код в замыкании, данные в этом месте перезаписываются
shiftReportsRef?.setValue(self.shiftDetails)
, который затем вызывает другое событие .value, поэтому перезаписывает узел снова (я думаю, вы можете видеть, куда это идет). Снова и снова.
Так что это не совсем ответ, потому что мы не знаем ожидаемого результата, но, вероятно, именно поэтому в приложении возникают задержки.