【发布时间】:2017-04-27 02:12:37
【问题描述】:
我正在编写一个 Firebase 云函数,并试图弄清楚 Promise.all 的工作原理。在我的代码中,我传入了array of database queries,我正在尝试read the resulting array,但我得到的只是垃圾:
T {
A:
P {
k: Sb { Ka: [Function: vb], ba: [Object] },
aa: P { k: [Object], aa: null, wb: [Object], Bb: '' },
wb: Zc { ld: [Object], ac: [Object] },
Bb: null },
V:
R {
u:
Gd {
app: [Object],
L: [Object],
Ua: [Object],
Sc: null,
ca: [Object],
td: 1,
Qa: [Object],
va: [Object],
qg: [Object],
jc: [Object],
ee: [Object],
md: [Object],
ia: [Object],
Xa: [Object],
cd: 2,
fe: null,
K: [Object] },
path: J { o: [Object], Y: 0 },
m:
Df {
xa: false,
ka: false,
Ib: false,
na: false,
Pb: false,
oa: 0,
kb: '',
bc: null,
xb: '',
Zb: null,
vb: '',
g: Tc {} },
Kc: false,
then: undefined,
catch: undefined },
g: Tc {} }
我期待一个简单的 json:
{
"name": "Foo",
"number": 2521
// And a few other fields
}
顺便说一句,我看了Jen's video 所以我知道我在做什么是错的;我只想知道为什么我现有的代码不起作用。 (我还没有测试过,但我相信解决方案是在我的数据库查询中返回原始快照,然后调用.val()。)
链接消失时的相关代码:
function mergeTeams(duplicates) {
return Promise.all([
admin.database().ref(someRef).once('value', (snap) => {
return snap.val();
}),
admin.database().ref(someRef2).once('value', (snap) => {
return snap.val();
})
]).then(values => {
console.log(values);
const team1 = values[0];
const team2 = values[1];
console.log(team1);
console.log(team2);
}
【问题讨论】:
-
你没有展示你是如何使用
Promise.all- 可能是错误的(把相关代码放在问题中) -
是的,我做了,单击名为“数据库查询数组”的链接。或点击这里:github.com/SUPERCILEX/Robot-Scouter/blob/…
-
不,相关代码应该在问题中
-
我认为你需要做一些类似
admin.database().ref(teamRef + duplicates.teamKey2).once('value').then(snap => snap.val())的事情——因为,好吧,promise 就是这样工作的 -
看,你使用回调的方式意味着回调中返回的值与任何东西都没有关系(它被忽略了)
标签: javascript firebase firebase-realtime-database es6-promise google-cloud-functions