我有一个没有错误运行的云函数,但是,它不会在Promise之后写入数据库。
我已经在Web浏览器中测试了此功能,并且Promise.all之后的数据似乎可以正确解析。当我将其放入云函数时,Promise.all之后的console.log()会显示原始数据,而不是更新的数据,就好像跳过了forEach并立即解决了一样。当函数在浏览器中运行时,我没有这种行为。
最重要的是,如果数据在Promise之后,则不会将其写入Firestore。所有在此之前的数据都可以正常写入。
<input>zyx</input>
<input>ghi</input>
==================================
<input>zyx</input>
<input>ghi</input>
==================================
<input>zyx</input>
<input>ghi</input>
==================================
<input>zyx</input>
<input>ghi</input>
==================================
<input>zyx</input>
<input>ghi</input>
任何帮助都会得到帮助!
答案 0 :(得分:1)
似乎您在尝试仍无法使用getIndex时,请看一下异步操作...使用async / await,您可以将代码重构为类似的样子
exports.scheduledIndexUpdate = functions.pubsub
.schedule("every 30 minutes")
.onRun(async context => {
console.log("This will be run every 30 minutes!");
var newIndex;
var getIndex = await admin.collection("billsIndex")
.doc("GS2019Index")
.get()
.then(doc => doc.exists ? doc.data() : null);
// you have you docs available here
for (let prop of getIndex) {
await admin
.firestore()
.collection("billsMetaData")
.doc(key)
.get()
.then(() => { /..,/ })
// etc
}
await admin.firestore().collection("billsIndex")
.doc("GS2019Index2")
.set({
newIndex
});
return Promise.resolve(/.../)
这样,您将迫使执行等待到诺言解决为止