Bạn cần quản lý vòng đời của một hàm để đảm bảo hàm đó phân giải đúng cách. Bằng cách chấm dứt hàm đúng cách, bạn có thể tránh bị tính phí quá mức đối với các hàm chạy quá lâu hoặc lặp vô hạn. Ngoài ra, bạn có thể đảm bảo rằng phiên bản Cloud Functions chạy hàm của bạn không tắt trước khi hàm đạt đến điều kiện hoặc trạng thái chấm dứt 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 nền") bằng cách trả về một lời hứa JavaScript.
- Chấm dứt 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ộ 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 thao tác và giá trị trong tương lai mà thao tác đó có thể trả về. Lời hứa 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ề lời hứa trong Firebase SDK trên Blog Firebase, và lời hứa nói chung trên MDN.
Cách lời hứa hoạt động 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 phân giải hoặc bị từ chối. Để cho biết rằng một hàm đã hoàn tất công việc thành công, lời hứa phải được phân giải. Để cho biết lỗi, lời hứa phải bị từ chối. Điều này có nghĩa là bạn chỉ cần xử lý những lỗi mà bạn muốn.
Đoạn mã sau đây lấy một 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 công việc không đồng bộ ghi chuỗi vào cơ sở dữ liệu hoàn tất:
// 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 ngữ cảnh
Hầu hết các mẫu mã Cloud Functions Cloud Functions của chúng tôi đều có ví dụ về việc chấm dứt hàm đúng cách. Sau đây là một vài ví dụ minh hoạ các trường hợp điển hình:
- Trình kích hoạt Cơ sở dữ liệu theo thời gian thực: một hàm HTTP theo sau là một lệnh chuyển hướng
- Trình kích hoạt Cloud Storage
:
Tải xuống bộ nhớ, sau đó là
then - Webhook khi ghi vào Cơ sở dữ liệu theo thời gian thực
:
Một lỗi được gửi bên trong mệnh đề
then - Xoá định kỳ các tài khoản không dùng đến : Một lời hứa bị từ chối