Firebase querySnapshot中显示了错误的元素

时间:2018-09-12 10:27:29

标签: swift firebase google-cloud-firestore

我在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 :(得分:2)

此操作是异步的,您不能保证服务器将串行响应,请使用串行队列

[err, wallet] = await to(User.findOneAndUpdate(
        {_id:req.user._id},
        {
            $inc : {'wallet.balance': -500}
        }
    ));

OR

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)

答案 1 :(得分:1)

为什么使用-1删除,这可能是可行的,然后:-

for recepieID in 0 ... test.count{
   print (recepieID)
}
相关问题