我在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
}
}
答案 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)
}