gpt4 book ai didi

javascript - 使用 firebase 函数 onCall 在 firestore 中进行 CRUD 数据。其中的任何异步操作(Promise)会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:42 25 4
gpt4 key购买 nike

当我调用下面的函数时,我的 Firestore 没有任何反应。我在 GCP 日志上也看不到“inside helloWorld”。

exports.helloWorld = functions.https.onCall((data, context) => {

console.log("inside helloWorld);
const users = admin.firestore().collection('users');

users.doc(data.userId).get().then( // --------------------Line A
(snapshot) => {
if (snapshot.exists) {
console.log("snapshot exists");
return null;
} else {
console.log("inside else");
users.doc(data.userId).set({
name: data.name
});
return null;
}
}
).catch(() => 'obligatory catch');

return; //-----------------------------------------------Line B
});

但是,当我将返回放在 A 行时,该函数按预期工作,并在我的 Firestore 中创建了一个文档。我的 GCP 日志中显示了“inside helloWorld”。

为什么会这样呢?我真的很感谢任何级别的澄清。

最佳答案

根据documentation for callable functions (特别是关于 sending back a result 的部分):

To return data after an asynchronous operation, return a promise. The data returned by the promise is sent back to the client. For example, you could return sanitized text that the callable function wrote to the Realtime Database.

即使您不想在响应中发送任何内容,可调用函数仍然需要响应发起它们的 HTTP 请求,就像所有 HTTP 事务一样。

无论哪种情况,您仍然需要在所有异步调用中使用 Promise,以便 Cloud Functions 知道在所有工作完成后何时响应客户端。将 return 语句放在“A 行”上可以有效地从 get() 启动的异步工作中返回 Promise,从而满足此要求。如果没有 return 语句,Cloud Functions 会终止您的函数,因为它认为没有更多工作需要完成才能发送最终响应。

如果您不熟悉 JavaScript 中的 Promise 如何工作,请观看我的视频教程:https://firebase.google.com/docs/functions/video-series/

关于javascript - 使用 firebase 函数 onCall 在 firestore 中进行 CRUD 数据。其中的任何异步操作(Promise)会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com