我有一个函数应该返回给定集合中的文档数据列表。
+--------+----+--------------------+
|iD |val |Code |
+--------+----+--------------------+
|001 |044 |9022070536692784476 |
|002 |066 |-5138930048185086175|
|003 |025 |805582856291361761 |
|004 |017 |-9107885086776983000|
|005 |018 |1993794295881733178 |
|006 |031 |-2867434050463300064|
|007 |088 |-4692317993930338046|
|008 |044 |-4039776869915039812|
|009 |020 |-5786627276152563542|
|0010 |012 |7614363703260494022 |
+--------+----+--------------------+
}
此函数始终返回function _getPrevActivity(){
let historyCollectionRef = firestore.collection("/users/RSgNDLPxT2aAERQutXEEyhHHJYk1/agreements/DkRdZ5kHi2g7MlBV3Kjq/test/test-something/records/15/history");
let value = [];
let wait;
historyCollectionRef.orderBy('timeStamp').onSnapshot(querSnap => {
querSnap.forEach(doc => {
value.push(doc.data())
console.log(value.length, " length")
})
console.log(value)
return value;
});
return value;
并稍后执行firestore查询。
PS:我是Node env的新手,我写这个函数的方式可能也有问题。
答案 0 :(得分:0)
您正在处理异步调用的经典错误,就像使用同步编程一样。
我重新编写了您的代码,如下所示:
function _getPrevActivity() {
let value = [];
let wait;
const path = "/users/RSgNDLPxT2aAERQutXEEyhHHJYk1/agreements/DkRdZ5kHi2g7MlBV3Kjq/test/test-something/records/15/history";
return firestore.collection(path).orderBy('timeStamp')
.onSnapshot(querSnap => {
querSnap.forEach(doc => {
value.push(doc.data())
console.log(value.length, " length")
});
console.log(value)
return value;
}).catch(error => {
console.log(error);
return value;
});
}
// calling function
function otherFunc() {
_getPrevActivity().then(value => {
// do something with value...
// value will not be an empty array now
console.log(value);
}).catch(console.log);
}
你在这里犯的错误是你不能真正从匿名函数querSnap => {...
返回一个值,除非你还从你希望返回值的函数中返回封闭的promise。
此外,要从异步调用的return
访问值,需要使用我已添加到下面代码中的then()
子句。