我为 Firebase 编写了一个云函数,它是一个 https 可调用的函数,应该删除文件夹内的所有文件。看起来是这样的:
import * as functions from "firebase-functions";
const admin = require('firebase-admin');
admin.initializeApp();
const {Storage} = require("@google-cloud/storage");
const storage = new Storage({keyFilename: "myserviceaccount.json"});
const fileBucket = "myfilebucket";
exports.deleteFolder = functions.https.onCall(async (data, context) => {
if (!context.auth) {
throw new functions.https.HttpsError(
"unauthenticated",
"only authenticated users can add requests"
);
}
const bucket = storage.bucket(fileBucket);
return bucket.deleteFiles({
prefix: `${data.folderName}`,
}, function(err:any) {
if (err) {
console.log(err);
} else {
// eslint-disable-next-line max-len
console.log(`All the Firebase Storage files in users/${data.folderName}/ have been deleted`);
}
});
});
效果很好。但我的文件夹有时会包含相当多的文档,因此我在部署此功能时得到的 60 秒的标准时间限制有时不足以删除文件夹内的所有文件。所以我想将计算时间限制提高到540秒,这是根据Cloud Functions我可以获得的最大计算时间。但我找不到这样做的可能性。
如何提高单个 https 可调用函数的时间限制?
如doc中所述,您需要执行以下操作:
const runtimeOpts = {
timeoutSeconds: 540
}
exports.deleteFolder = functions
.runWith(runtimeOpts)
.https
.onCall(async (data, context) => {...});
请注意,您还可以通过 Google Cloud Console(不是 Firebase 控制台)配置此值。
在 Google Cloud Console 中,选择您的 Firebase 项目,选择“Cloud Functions”垂直菜单项,单击函数名称,然后单击“编辑”按钮。然后单击“VARIABLEs, ....”部分标题(如下所示)并调整相应字段中的超时值。