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 nó được phân giải đúng cách. Bằng cách chấm dứt các hàm đúng cách, bạn có thể tránh được các khoản phí quá 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 rằng 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 trạng thái hoặc điều kiện kết thúc thành công.
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:
- Phân giải các hàm thực hiện quá trình xử lý không đồng bộ (còn gọi là "hàm trong nền") bằng cách trả về hứa hẹn JavaScript.
- Chấm dứt các hàm HTTP bằng
res.redirect()
,res.send()
hoặcres.end()
. - Chấm dứt một hàm đồng bộ bằng câu lệnh
return;
.
Đơn giản hoá mã không đồng bộ bằng lời hứa JavaScript
Lời hứa là một giải pháp thay thế hiện đại cho lệnh gọi lại đối với mã không đồng bộ. Lời hứa đại diện cho một phép toán và giá trị trong tương lai mà phép toán đó có thể trả về. Phương thức này cũng cho phép bạn truyền lỗi tương tự như try/catch trong mã đồng bộ. Bạn có thể đọc về các lời hứa trong SDK Firebase trên Blog Firebase và các lời hứa nói chung trên MDN.
Cách hoạt động của lời hứa với các hàm
Khi bạn trả về một lời hứa 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 một hàm đã hoàn tất công việc thành công, bạn phải phân giải lời hứa. Để cho biết lỗi, bạn phải từ chối lời hứa. Điều này có nghĩa là bạn chỉ cần xử lý những lỗi mà bạn muốn.
Mã sau đây lấy Firebase Realtime Database ref
và đặt giá trị của nó thành "world!"
. Bằng cách trả về kết quả của set
, hàm của bạn được đảm bảo sẽ tiếp tục chạy cho đến khi hoàn tất tác vụ không đồng bộ là ghi chuỗi vào cơ sở dữ liệu:
// 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 mã mẫu Cloud Functions của chúng tôi đều có ví dụ về cách chấm dứt hàm đúng cách. Sau đây là một số trường hợp điển hình:
- Điều kiện kích hoạt cơ sở dữ liệu theo thời gian thực: một hàm HTTP theo sau là lệnh chuyển hướng
- Trình kích hoạt
Bộ nhớ trên đám mây:
Tải xuống bộ nhớ, theo sau là
then
- Webhook khi ghi cơ sở dữ liệu theo thời gian thực: Lỗi được tạo ra bên trong mệnh đề
then
- Thường xuyên xoá các tài khoản không dùng đến: Lời hứa bị từ chối