Google Cloud Function 在 Firestore 更新完成之前终止

Google Cloud Function is terminated before update to Firestore is finished

我有一个云后台函数,可以从外部来源提取一些数据。那么这些数据应该存储在 Firestore 文档中。但它永远不会被存储。文档没有变化。这是我的代码:

public class MyFunction implements BackgroundFunction<PubSubMessage> {

   @Override
   public void accept(PubSubMessage message, Context context) {
      // pulling data from external source
      MyClass myObject = getData();
      // db is the Firestore object and was initialized earlier
      CollectionReference colRef = db.collection(MY_COL);
      DocumentReference docRef = colRef.document(MY_DOC);
      ApiFuture<WriteResult> future = docRef.set(myObject);
      ApiFutures.addCallback(future,
         new ApiFutureCallback<WriteResult>() {
            @Override
            public void onFailure(Throwable throwable) {
               logger.log(Level.SEVERE,
                  "Failed to Update Object to Firestore", throwable);
            }

            @Override
            public void onSuccess(WriteResult writeResult) {
               logger.info("Update Object Document ... DONE");
            }
         }, Runnable::run);
   }
}

来自 onFailureonSuccess 的日志记录从未出现在 Firebase 仪表板的日志中。感觉好像函数在写入过程完成之前就终止了。日志没有错误,外源数据拉取成功。

如何确保该函数不会在写入过程完成之前终止?

get() 必须调用。

public class MyFunction implements BackgroundFunction<PubSubMessage> {

   @Override
   public void accept(PubSubMessage message, Context context) {
      // pulling data from external source
      MyClass myObject = getData();
      // db is the Firestore object and was initialized earlier
      CollectionReference colRef = db.collection(MY_COL);
      DocumentReference docRef = colRef.document(MY_DOC);
      ApiFuture<WriteResult> future = docRef.set(myObject);
      future.get();
   }
}

恕我直言,这是此函数的误导性名称,因为它暗示未来的结果会返回,但仅在未来完成后返回。我本来期望 waitAndGet()waitForFinish().