我的功能解析不正确吗?同样,它也不会写入Firebase到数据库。没有错误

时间:2019-06-28 04:03:48

标签: javascript firebase google-cloud-firestore google-cloud-functions

我有一个没有错误运行的云函数,但是,它不会在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>

任何帮助都会得到帮助!

1 个答案:

答案 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(/.../)

这样,您将迫使执行等待到诺言解决为止