javascript - OrderBy + foreach + dataRef 在 Firestore/Firebase 中不起作用
问题描述
[已编辑] 更正错字
假设我们有两个名为matches
和的数据库teams
。
matches
有date
和teamARef
作为teamBRef
字段。date
是我们想要订购的日期时间。teamARef
并且teamBRef
是在下面的代码中获得的dataRef。
teams
可以有一个name
字段等。
orderBy
实际上工作正常。console.log(doc.data().date)
下面按顺序显示匹配项。
但是在teamARef.get().then(){}
块中,它不再起作用了。
早期的比赛往往出现得早,但顺序不好。
也许发生这种情况then()
是因为不一定按照与orderBy
?
代码
var db = firebase.firestore();
db.collection("matches").orderBy("date").limit(20)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// **IN ORDER**
console.log(doc.data().date)
var teamARef = db.collection("teams").doc(doc.data().teamARef.id)
var teamBRef = db.collection("teams").doc(doc.data().teamBRef.id)
teamARef.get().then(function(docA){
teamBRef.get().then(function(docB){
var nameA = docA.data().name
var nameB = docB.data().name
// **NOT IN ORDER!**
console.log(nameA + ', ' + nameB + ' @' + doc.data().date)
}
}
}
}
例如输出
它按此顺序出现。
2017-01-01
2017-01-02
2017-01-03
2017-01-04
2017-01-05
BAK, BIA @2017-01-01
EWN, ALE @2017-01-03
ENO, VNI @2017-01-02
LNE, LWM @2017-01-05
BIC, AIC @2017-01-04
解决方案
我认为你的意思是改变 teamBRef 但你在这里做了两次 teamARef:
var teamARef = db.collection("teams").doc(doc.data().teamARef.id)
var teamARef = db.collection("teams").doc(doc.data().teamARef.id)
推荐阅读
- java - 使用 Javax @XmlElement 读取属性时如何预处理 xml 字段
- reactjs - 为什么组件更新时 react-router Route attr render remount 不重新渲染?
- flutter - Flutter 同步图片上传
- vb.net - 是否可以将 PictureBox (Vb.net Visual Studio) 移动不到一个像素
- python - 在 Python 3.10 中继承联合类型
- django - Django 错误 NoReverseMatch at / Reverse for 'add-to-fav-songs' with arguments '('',)' not found
- c# - C# 根据另一个列表值对列表进行排序
- express - 在 next.js 中使用 express-sessions 进行基于会话的身份验证
- r - 如何在 R 的 mlm 中添加 2 级协变量?(包nlme)
- python - 我应该在哪里保存我的子类?[Python,最佳实践]