云函式回傳承諾后能否安全地執行異步作業?考慮以下模式:
exports.deleteUser = functions.auth.user().onDelete(async (user) => {
const uid = user.uid;
asyncTask1(uid);
asyncTask2(uid); // don't wait for the last task to finish
asyncTask3(uid); // just attempt them all and handle
asyncTask4(uid); // the failures individually later
return Promise.resolve(uid);
});
async function asyncTask1(uid) {
try {
await someAsyncWork();
return Promise.resolve(true);
} catch (error) {
throw new functions.https.HttpsError("unknown", "Task 1 failed.", error);
}
}
在 Cloud Functions 中是否應該避免這種模式?我擔心的是,為執行此呼叫而初始化的實體可能會在任務有機會完成之前被釋放,因為初始化實體的函式在被呼叫后幾乎立即回傳了一個 Promise。或者即使主函式已經終止,服務器是否會保持此實體處于活動狀態以讓異步作業完成?
uj5u.com熱心網友回復:
由于您所說的原因,您所說明的內容將可靠地無法正常作業。最終回傳的 Promise 必須在所有其他 Promise 都解決后才解決,否則作業可能無法完成。在回傳的承諾解決后,Cloud Functions 不會執行“后臺作業”。如果您需要在不導致函式完全終止的情況下繼續某些作業,則需要將其傳遞給其他一些計算服務(您可能還需要為此付費)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479887.html
標籤:javascript 节点.js 火力基地 谷歌云功能
上一篇:異步/等待功能不加載資料
