В Firebase querySnapshot обнаружен неправильный элемент - PullRequest
0 голосов
/ 12 сентября 2018

Я делаю приложение в Swift, у меня есть массив с числами и я хочу получить некоторые данные в Firebase.

Проблема в том, что getDocuments шифрует мою итерацию.

Когда я делаю тест для распечатки, первый печатает 0,1,2,3, а второй, внутри getDocuments, показывает 0,2,1,3

let test = ["20180905212533","20180905220014","20180905212533","20180905220014"]
for recepieID in 0 ... test.count-1{
   print (recepieID) //Shows right recepieID = 0,1,2,3
   db.collection("Recipes")
     .whereField("created", isEqualTo: test[recepieID])
     .getDocuments() { (querySnapshot, err) in
        print (recepieID)// Do not show right recepieID = 0,2,1,3
      }
}

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Эта операция является асинхронной, вы не можете гарантировать, что сервер будет отвечать последовательно, либо использовать последовательную очередь

let q = DispatchQueue(label: "CustomQueue")
let test = ["20180905212533","20180905220014","20180905212533","20180905220014"]
for recepieID in 0 ... test.count-1{
   q.async {
   print (recepieID) //Shows right recepieID = 0,1,2,3

   db.collection("Recipes")
     .whereField("created", isEqualTo: test[recepieID])
     .getDocuments() { (querySnapshot, err) in
        print (recepieID)// Do not show right recepieID = 0,2,1,3
      }
}}

ИЛИ

load(0)

//

func load(_ recepieID:Int) {

   db.collection("Recipes")
 .whereField("created", isEqualTo: test[recepieID])
 .getDocuments() { (querySnapshot, err) in
    print (recepieID)// Do not show right recepieID = 0,2,1,3
    if recepieID < test.count {
       load(recepieID+1)
    }
  }
}
0 голосов
/ 12 сентября 2018

почему вы используете -1 удалить это может быть это работает найти тогда: -

for recepieID in 0 ... test.count{
   print (recepieID)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...