Đồng bộ hoá, không đồng bộ và hứa hẹn

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 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 đạt đến điều kiện hoặc trạng thái kết thúc thành công.

Hãy sử dụng các phương pháp đề 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 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ặc res.end().
  • Kết thúc 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

Promise 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ề. Tính năng 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ề 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 giải quyết hoặc bị từ chối. Để cho biết rằng một hàm đã hoàn tất thành công công việc, lời hứa sẽ được giải quyết. Để cho biết lỗi, bạn nên 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.

Đ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ộ của việc 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 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 vài ví dụ minh hoạ các trường hợp điển hình: