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

Điều quan trọng là bạn phải quản lý vòng đời của một hàm để đảm bảo giải quyết đú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 tình trạng sạc 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 bị tắt trước khi hàm đạt đến điều kiện hoặc trạng thái kết thúc.

Hãy áp dụng các phương pháp đề 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 về JavaScript.
  • Chấm dứt hàm HTTP bằng res.redirect(), res.send() hoặc res.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ộ với các lời hứa hẹn với JavaScript

Promise là một giải pháp thay thế hiện đại cho các lệnh gọi lại cho mã không đồng bộ. Lời hứa đại diện cho một hoạt động và giá trị tương lai mà hoạt động đó có thể trả về. Mã này cũng cho phép bạn lan truyền các lỗi tương tự như try/catch trong mã đồng bộ. Bạn có thể đọc về các tính năng hứa hẹn trong Firebase SDK trên Blog Firebase và về các 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 một hàm đã hoàn tất thành công công việc của mình, lời hứa phải được giải quyết. Để chỉ báo lỗi, lời hứa nên bị từ chối. Tức là bạn chỉ cần xử lý các lỗi mình muốn.

Mã sau đây sẽ lấy một Cơ sở dữ liệu theo thời gian thực của Firebase ref và đặt giá trị của cơ sở dữ liệu đó thành "world!". Khi trả về kết quả của set, hàm của bạn sẽ được đảm bảo 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 Chức năng đám mây của chúng tôi đều có các ví dụ về việc chấm dứt hàm đúng cách. Dưới đây là một vài ví dụ minh hoạ các trường hợp điển hình: