Firebase 云函数中的多个数据库调用
我有一个可调用的Cloudfunction,它可以获取多个数据。 从何处提取的键由函数计算 我有一个这样的数组Firebase 云函数中的多个数据库调用,firebase,firebase-realtime-database,google-cloud-functions,Firebase,Firebase Realtime Database,Google Cloud Functions,我有一个可调用的Cloudfunction,它可以获取多个数据。 从何处提取的键由函数计算 我有一个这样的数组 var keys = ["key1", "key2, "key5"] 问题是keylist的长度是可变的,我想将从数据库中收集的所有数据以给定的键发送回用户 大概是这样的: result = { key1: value, key2: value, key5: value, } 数据库只提供非asnyc的期票。 一旦收集了所有数据,我如何确保我只提供数据。 差不多 adm
var keys = ["key1", "key2, "key5"]
问题是keylist的长度是可变的,我想将从数据库中收集的所有数据以给定的键发送回用户
大概是这样的:
result = {
key1: value,
key2: value,
key5: value,
}
数据库只提供非asnyc的期票。
一旦收集了所有数据,我如何确保我只提供数据。
差不多
admin.database().ref('/path/key1').once('value').then( snapshot => {
admin.database().ref('/path/key2').once('value').then ( snapshot => {
...
}
}
不起作用,因为键的数量是可变的。我设法找到了解决问题的方法 我必须编写一个递归函数来链接承诺
function fetchData(keyArray) {
var index = 0;
var fetchedValues = {};
return new Promise(function(resolve, reject) {
function next(fetchedValues) {
if (index < keyArray.length) {
newFetchedValues = fetchedValues;
admin.database().ref('/path/to/key/' + keyArray[index]).once('value').then(((snapshot) => {
newFetchedValues[keyArray[index]] = snapshot.val();
index++;
next(newFetchedValue);
}), reject);
} else {
resolve(fetchedValues);
}
}
next(fetchedValues);
});
}
函数获取数据(keyArray){
var指数=0;
var fetchedValues={};
返回新承诺(功能(解决、拒绝){
函数next(fetchedValues){
if(索引{
newFetchedValues[keyArray[index]]=snapshot.val();
索引++;
next(newFetchedValue);
}),拒绝);
}否则{
解析(获取值);
}
}
下一步(获取值);
});
}
一旦获取数组中的所有值,此函数将返回一个promise对象,该对象可以解析状态。
这允许同步获取动态数量的值
我按照这个问题的第一个答案解决了这个问题
所有这些听起来都是可行的。有什么问题吗?在实现这一点的过程中,您在哪里遇到了困难?正如前面所说,我只获得承诺变量,不能使用wait,要等待结果将所有内容添加到一起,请更新您的问题以包含。如果没有这一点,除了为您编写代码之外很难有所帮助,这不是堆栈溢出的原因。谢谢@frankvanpoffelen我正要这么做。如果您在数组中收集对
once()
的调用的所有承诺,然后使用Promise.all()
在另一个数组中接收所有结果。很酷,谢谢,伙计,这是我找到解决方案时一直在寻找的东西。