Quan trọng là bạn phải quản lý vòng đời của một hàm để đảm bảo rằng vòng đời đó được giải quyết đúng cách. Bằng cách chấm dứt các chức năng đúng cách, bạn có thể tránh được các khoản phí vượt mức từ các hàm chạy quá lâu hoặc lặp lại vô hạn. Ngoài ra, bạn có thể đảm bảo thực thể Cloud Functions đang chạy hàm của bạn không tắt trước khi hàm của bạn đạt đến thành công điều kiện hoặc trạng thái kết thúc.
Hãy sử dụng các phương pháp được đề xuất sau đây để quản lý vòng đời của các hàm:
- Giải quyết các hàm thực hiện xử lý không đồng bộ (còn được gọi là "hàm nền") bằng cách trả về một JavaScript Cam kết.
- Chấm dứt các hàm HTTP bằng
res.redirect()
,res.send()
hoặcres.end()
. - Chấm dứt hàm đồng bộ bằng câu lệnh
return;
.
Đơn giản hoá mã không đồng bộ với hứa hẹn JavaScript
Lời hứa là giải pháp thay thế hiện đại cho lệnh gọi lại cho mã không đồng bộ. Một lời hứa biểu thị một hoạt động và giá trị tương lai mà nó có thể trả về. Tính năng này cũng cho phép bạn truyền các lỗi tương tự như try/catch trong mã đồng bộ. Bạn có thể đọc về các hứa hẹn trong Firebase SDK trên trang Firebase Blog, và lời hứa nói chung về MDN.
Cách hứa hẹn hoạt động với các hàm
Khi bạn trả về một lời hứa trong JavaScript cho một hàm, hàm đó sẽ tiếp tục chạy cho đến khi lời hứa được giải quyết hoặc bị từ chối. Để cho biết rằng một đã hoàn tất công việc thành công thì lời hứa sẽ được giải quyết. Người nhận chỉ ra lỗi, lời hứa sẽ bị từ chối. Điều này có nghĩa là bạn chỉ cần xử lý các lỗi mà bạn muốn.
Mã sau đây lấy Firebase Realtime Database ref
và đặt giá trị thành
"world!"
. Khi trả về kết quả của set
, hàm của bạn được đảm bảo
tiếp tục chạy cho đến khi tác vụ ghi chuỗi vào cơ sở dữ liệu không đồng bộ
đã hoàn tất đầy đủ:
// Always change the value of "/hello" to "world!"
exports.hello = functions.database.ref('/hello').onWrite(event => {
// set() returns a promise. We keep the function alive by returning it.
return event.data.ref.set('world!').then(() => {
console.log('Write succeeded!');
});
});
Ví dụ theo bối cảnh
Hầu hết các mã Cloud Functions của chúng tôi mẫu chẳng hạn như ví dụ về cách kết thúc hàm đúng cách. Sau đây là một vài ví dụ cho thấy các trường hợp điển hình:
- Cơ sở dữ liệu theo thời gian thực điều kiện kích hoạt: một hàm HTTP theo sau là một lệnh chuyển hướng
- Bộ nhớ trên đám mây
điều kiện kích hoạt:
Tải xuống bộ nhớ, theo sau là
then
- Webhook trên Cơ sở dữ liệu theo thời gian thực
ghi:
Lỗi được tạo ra bên trong mệnh đề
then
- Xoá định kỳ nội dung không dùng đến tài khoản: Lời hứa bị từ chối