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);
}
}
来自 onFailure
和 onSuccess
的日志记录从未出现在 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()
.
我有一个云后台函数,可以从外部来源提取一些数据。那么这些数据应该存储在 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);
}
}
来自 onFailure
和 onSuccess
的日志记录从未出现在 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()
.