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

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 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 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ặc res.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ề. Việc này cũng giú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ề 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.

Đoạn mã sau đây lấy một ref của Cơ sở dữ liệu theo thời gian thực của Firebase và đặt giá trị của cơ sở dữ liệu này 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ụ về 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: