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

Điều quan trọng là phải quản lý vòng đời của một hàm để đảm bảo rằng nó hoạt động đúng cách. Bằng cách kết thúc các chức năng một cách chính xác, bạn có thể tránh bị tính phí quá nhiều từ các chức năng 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 Chức năng đám mây đang chạy chức năng của bạn không tắt trước khi chức năng của bạn đạt được trạng thái hoặc điều kiện kết thúc thành công.

Sử dụng các cách tiếp cận được đề xuất này để quản lý vòng đời của các chức năng của bạn:

  • Giải quyết các hàm thực hiện xử lý không đồng bộ (còn được gọi là "các hàm nền") bằng cách trả về một lời hứa JavaScript .
  • Chấm dứt các hàm HTTP bằng res.redirect() , res.send() hoặc res.end() .
  • Kết thúc một chức năng đồng bộ với một return; bản tường trình.

Đơn giản hóa mã không đồng bộ với các hứa hẹn JavaScript

Hứa hẹn 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ộ. Một lời hứa đại diện cho một hoạt động và giá trị tương lai mà nó có thể trả về. Nó cũng cho phép bạn phổ biến các lỗi tương tự như thử / bắt 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 hứa hẹn hoạt động với các chức năng

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. Để chỉ ra rằng một chức năng đã hoàn thành công việc của nó thành công, lời hứa phải được giải quyết. Để chỉ ra một lỗi, lời hứa nên 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 lấy tham chiếu Cơ sở dữ liệu thời gian thực của 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 thành công việc không đồng bộ của việc 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ụ trong ngữ cảnh

Hầu hết các mẫu mã Chức năng đám mây của chúng tôi bao gồm các ví dụ về kết thúc chức năng thích hợp. Dưới đây là một số trường hợp điển hình: