這是代碼,
exports.onEmailRecieved = functions.database
.ref("/emails/recieved/{id}/")
.onCreate(async (snapshot, context) => {
const email = snapshot.val();
const id = context.params.id;
const trimmedEmailBody = String(email.body).replace("\n", "").trim();
if (trimmedEmailBody === cmd) {
const queueRef = fs.collection("requests").doc("all").collection("queue");
await fs
.runTransaction(async (t) => {
const doc = await t.get(queueRef);
const size = doc.size;
console.log(`Size: ${size}`);
console.log("Adding to queue.");
await queueRef
.add({
email: email.email,
subject: email.subject,
body: email.body,
})
.then(() => {
console.log("Successfully added to queue.");
})
.catch((err) => {
console.log(err);
})
.finally(() => {
console.log("It's finally over.");
});
return console.log("Worked?");
})
.then(() => {
return console.log("Complete");
})
.catch((err) => {
return console.log(err);
});
return console.log("Worked I guess.");
} else {
return console.log("Not equal.");
}
});
不要介意一堆無用的console.logs。添加了 em 來除錯錯誤。
第一個 console.log 被呼叫,然后什么都沒有, nothen??或catch函式finally被觸發,我得到一個函式完成狀態:日志中的“超時”訊息。
我做錯了什么?
uj5u.com熱心網友回復:
該add()方法回傳一個promise,然后當您等待promise 時,該函式以非阻塞方式暫停,直到promise 完成。它將等待事務完成,然后再解決檔案的創建,這會導致云功能超時,默認為 1 分鐘。通過洗掉awaiton add 方法,您將改為執行該函式。請參見下面的代碼:
messageRef
.add({
email: "email",
subject: "subj",
body: "body",
})
.then(() => {
console.log("Successfully added to queue.");
})
.catch((err) => {
console.log(err);
})
.finally(() => {
console.log("It's finally over.");
});
現在將回傳如下內容:
Size: 1
Adding to queue.
test
Successfully added to queue.
It's finally over.
有關更多相關資訊,您可以查看以下檔案:
- 同步、異步和承諾
- 集合參考
- 如何使用承諾
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455033.html
