【发布时间】:2021-01-30 13:03:29
【问题描述】:
我与 firebase 功能斗争了几天,今天我开始了本教程 https://codelabs.developers.google.com/firebase-emulator。然而在第 16 步有这样的事情:
await new Promise((resolve) => {
const unsubscribe = aliceCartRef.onSnapshot(snap => {
const expectedCount = 2;
const expectedTotal = 9.98;
console.log(snap.data());
if (snap.data().itemCount === expectedCount && snap.data().totalPrice == expectedTotal) {
console.log("We're in if!");
unsubscribe();
console.log("After subscribe!");
resolve();
console.log("After resolve!");
};
});
});
我自己放置了console.log,发现onSnap 函数运行了两次。第一次 snap 对象看起来像这样: { totalPrice: 0, itemCount: 0, ownerUID: 'alice' } 并且它不通过 if 条件。第二次 snap 是 { ownerUID: 'alice', totalPrice: 9.98, itemCount: 2 } 所以如果条件但 resolve() 没有关闭 Promise,它就会通过。最后因为超时,每次都测试失败。
为什么 resolve() 在第二次调用中不起作用?
【问题讨论】:
标签: javascript firebase google-cloud-firestore google-cloud-functions